根据 here ,C 编译器会在将结构写入二进制文件时填充值。正如链接中的示例所说,在编写这样的结构时:
struct {
char c;
int i;
} a;
对于二进制文件,编译器通常会在 char 和 int 字段之间留下一个未命名的、未使用的空洞,以确保 int 字段正确对齐。
我如何使用不同的语言(在我的例子中是 Java)创建二进制输出文件(在 C 中生成)的精确副本?
是否有一种自动方法可以在 Java 输出中应用 C 填充?或者我是否必须通过编译器文档来了解它是如何工作的(顺便说一下,编译器是 g++)。
最佳答案
不要这样做,它很脆弱,会导致对齐和字节序错误。
对于外部数据,最好根据字节显式定义格式,并使用移位和掩码(而不是 union !)编写显式函数在内部和外部格式之间进行转换。
关于java - 在 Java 中复制 C 结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839407/