gpt4 book ai didi

c - fwrite 没有表现得像它应该的那样

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:11 26 4
gpt4 key购买 nike

我有一个使用 fwrite(..) 写入文件的 C 程序,结果与我提供的函数参数不一致。

  uint32_t x = 1009716161;
FILE * file = fopen("helloop.txt", "wb+");
rewind(file);
fwrite( &x, sizeof(uint32_t), 1, file);
fclose(file);

当我之后检查文件时,它似乎包含无法转换为任何内容的符号

>cat helloop.txt
>Á /<

因为我应该得到这个

>cat helloop.txt
>000000003C2F0BC1

我检查了文件的权限并修改了它

 chmod 777 helloop.txt

在我看来,我有一个 1 大小的 32 位整数元素,我想将其写入文件,我究竟做错了什么 ?

最佳答案

您的程序完全按照您的指示执行。

一般来说,如果您编写的程序看起来有问题,您不应该草草下结论说操作系统、编译器或运行时库有问题。更有可能是您的程序中存在错误,或者您误解了某些内容。无论您有多少年的经验,这都是正确的。

1009716161 , 用十六进制表示为 0x3c2f0bc1 .当您将该值写入二进制文件时,您写入了 4 个 8 位字节,值为 0x3c , 0x2f , 0x0b , 和 0xc1 .在 ASCII 中,这些是 '<' , '/' , 以及可打印 ASCII 范围之外的两个字符。它们的写入顺序取决于您的系统的字节顺序,但您报告的内容似乎与此一致。

我不确定您为什么希望看到 000000003C2F0BC1。当您只向文件写入 4 个字节时,它是 16 个字节。此外,二进制文件不包含您所用数据的十六进制表示形式的 ASCII 呈现写了——它们只包含数据。

如果您通过将文件从原始二进制转换为十六进制来检查文件(通过使用 hexdumpod -x 命令,如果您的系统有它),您应该看到一些可识别的东西。

如果您以二进制模式打开文件并使用 fread将数据读回 uint32_t对象,你应该得到原始值 1009716161返回——这就是重点。

关于c - fwrite 没有表现得像它应该的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com