使用uint8_t数组进行fwrite

时间:2011-10-22 02:44:13

标签: c int fwrite

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

cat file.txt

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

打开文件时
vim file.txt

我得到一个带有一堆乱七八糟的超级打击文件,主要是高重复的

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

vim还注意到打开窗口底部的[noeol]

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

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

原始文件有〜150个字符,jibberish文件有~30k个字符。

我很感激任何答案或方向
-austin

1 个答案:

答案 0 :(得分:1)

当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);