gpt4 book ai didi

c - 使用 uint8_t 数组进行 fwrite

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

我正在使用 fwrite 写入一个 uint8_t 类型的数组。在终端中,运行程序后,当我使用

cat file.txt

一切都按应有的方式打印。但是当我用

打开文件时
vim file.txt

我得到了一个 super 乱七八糟的文件,里面有一堆乱码,主要是高重复度的

^@^@^@^@^@^@...

vim 还会在打开的窗口底部注明 [noeol]

问题的上下文:udp 客户端/服务器文件复制程序。我需要原始文件与我的新文件进行比较;它没有。

uint8_t buf[...];
recvfrom(...buf...);
fwrite(buf...);

原始文件有约 150 个字符,乱码文件有约 30k 个字符。

如果有任何答案或指导,我将不胜感激
-austin

最佳答案

当 vim 在文件中遇到不可打印的字符时,它使用转义码来表示它。 ^@ 转义码用于表示空字符(即 C 中的 '\0')。此字符不可打印,当您执行 cat file.txt 时,控制台会丢弃它。

所以我认为您的代码将不正确的大小传递给 fwrite 调用。传递的是缓冲区大小而不是接收数据的大小吗?

您的代码应该类似于(经过适当的错误检查):

uint32_t datalen;
uint8_t buffer[BUFSIZE];
datalen = recvfrom(s, buffer, BUFSIZE, flags, &from, &from_len);
fwrite(buffer, 1, datalen, f);

关于c - 使用 uint8_t 数组进行 fwrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857087/

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