【发布时间】:2010-10-24 18:36:24
【问题描述】:
根据here,C 编译器将在将结构写入二进制文件时填充值。正如链接中的示例所说,在编写这样的结构时:
struct {
char c;
int i;
} a;
对于二进制文件,编译器通常会在 char 和 int 字段之间留下一个未命名的、未使用的空洞,以确保 int 字段正确对齐。
如何使用不同的语言(在我的例子中是 Java)创建二进制输出文件(用 C 生成)的精确副本?
是否有在 Java 输出中应用 C 填充的自动方法?还是我必须通过编译器文档才能看到它是如何工作的(顺便说一下,编译器是 g++)。
【问题讨论】:
-
值得注意的是,java 中的 char 是 16 位值,而不是 C 中的 8 位值。我建议您使用类似 ByteBuffer.putInt(0, c & 0xFF) ;顺便说一句,您知道数据是大端还是小端。在 C 中,这取决于您正在运行的机器的架构。
标签: java c compiler-construction padding