![]() |
1
9
C
不同的编译器、不同体系结构或操作系统上的相同编译器等,所有布局结构都会有所不同。
由于要读取的文件格式是根据字节的去向来定义的,因此结构虽然看起来非常方便和诱人,但不是正确的解决方案。您需要将文件视为
|
![]() |
2
10
为了满足底层平台的对齐要求,结构在成员之间可以有“padding”字节,以便每个成员从正确对齐的地址开始。 有几种方法可以解决这个问题:一种是使用适当大小的成员分别读取头的每个元素:
另一个是使用
位字段
在结构定义中;这些不受填充限制。缺点是位字段必须
如果文件是用big-endian写的,那么您可能还需要在每个成员中进行一些字节交换,但是您的系统是小endian。
注意
|
![]() |
3
5
解决方案是特定于编译器的,但例如在gcc中,您可以通过附加
|
![]() |
4
2
我已经有一段时间没有处理压缩文件了,但是我确实记得添加自己的填充来实现PowerPCarch的4字节对齐规则的实践。 充其量,您只需将结构的每个元素定义为您想要读入的数据块的大小。不要只使用“int”,因为它可能是定义为各种大小的平台/编译器。 在标题中执行类似的操作:
然后使用一个非签名的32代替int,其中有一个已知的4字节的变量。对于任何已知的2字节值,无符号16。 这将帮助您了解在哪里可以添加填充字节以实现4字节对齐,或者在哪里可以对2个2字节的元素进行分组以组成4字节对齐。 理想情况下,您可以使用最小的填充字节(可以在以后扩展程序时用于添加其他数据),如果您可以将所有内容与末尾的可变长度数据对齐到4字节边界,则可以完全不使用填充字节。 |
![]() |
5
0
此外,名称和额外的_字段可能不会包含任何有意义的数据。至少不在程序运行之间,因为这些都是指针。 |
![]() |
Martin M · zip中文件的编码(C#/ionic zip) 7 年前 |
![]() |
Juni · 创建包含字符串变量的文本/csv的zip文件下载 7 年前 |
![]() |
Ty Kayn · PHP7中的ZipArchive找不到zip的内容 7 年前 |