使用以下代码写入文件
int main(int argc, char * argv[])
{
uint32_t pattern1, pattern2;
int i, times;
sscanf("ae75db0f", "%x", &pattern1);
sscanf("518a24f0", "%x", &pattern2);
FILE * outFile = fopen(argv[1],"wb");
printf ("Pattern 1: %0x \nPattern 2: %0x \n", pattern1, pattern2);
times = 524288; // Write out 4 mB of data
for (i = 0; i < times; i++) {
fwrite(&pattern1, 4, 1, outFile);
fwrite(&pattern2, 4, 1, outFile);
}
fclose (outFile);
}
在命令行上我执行xxd file |少
00018c0: f024 8a51 0fdb 75ae f024 8a51 0fdb 75ae .$.Q..u..$.Q..u.
00018d0: f024 8a51 0fdb 75ae f024 8a51 0fdb 75ae .$.Q..u..$.Q..u.
00018e0: f024 8a51 0fdb 75ae f024 8a51 0fdb 75ae .$.Q..u..$.Q..u.
00018f0: f024 8a51 0fdb 75ae f024 8a51 0fdb 75ae .$.Q..u..$.Q..u.
它没有显示应该写入文件本身的“正确”值。
答案 0 :(得分:3)
欢迎来到字母序列世界:
http://en.wikipedia.org/wiki/Endianness
答案 1 :(得分:2)
要详细说明@ ouah的答案,您必须确定系统的字节序。
在此示例中,您必须反转示例中的字节顺序,如下所示:
pattern1 = (pattern1 >> 16) | (pattern1 << 16);
答案 2 :(得分:1)
您发现了Endianness。如果您想要改变顺序,请查看htonl
等函数。
答案 3 :(得分:1)
它可能显示正确的顺序,事实是,如果不了解您的平台Endianness,就无法做出这样的断言。
这是一个很好的例子,为什么在读取非字节和写出字节时应该非常小心。
答案 4 :(得分:1)
如果你在同一台机器上将它们作为uint32_t
读回来,它们会以相同的值返回。
如果查看基础char
,您在磁盘上看到的内容与您在内存中看到的内容相同。