我有文件test.bin,其内容为:33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31当我读到这个文件时,我得到了这样的结果:3333203046203133203035203534203635.我无法理解我做错了什么办法.
void ReadBinFile()
{
int i;
FILE *ptr;
unsigned char buffer2[17];
ptr = fopen("test.bin","r");
fread(buffer2,sizeof(buffer2),1,ptr);
for(i = 0; i<17; i++)
printf("%x", buffer2[i]);
}
Run Code Online (Sandbox Code Playgroud)
你得到了正确的答案.您已经写了文件"33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31"并且您收到的回复"3333203046203133203035203534203635"恰好是您编写的数据的十六进制ASCII.
您需要将数据作为二进制文件写入二进制文件,这将解决您的问题.
**编辑,因为这个评论太大了**
当您想使用二进制文件时,您需要将文件打开为二进制文件,将文件写为二进制文件,从文件中读取二进制文件等.fprintf()不适用于二进制文件.因此,为了使代码工作,您需要进行以下更改:(这是对代码的快速破解,需要大量抛光)
void WriteBinFile(void)
{
FILE *ptr;
unsigned char a[] = {0xFF};
ptr = fopen("test.bin","wb");
fwrite (a, sizeof(unsigned char), 1, ptr);
fclose (ptr);
}
void ReadBinFile(void)
{
static const size_t BufferSize = 17;
int i;
FILE *ptr;
unsigned char buffer2[BufferSize];
ptr = fopen("test.bin","rb");
const size_t fileSize = fread(buffer2, sizeof(unsigned char), BufferSize, ptr);
printf("File size = %d bytes\n", fileSize);
printf("Size of each item in bytes = %d\n", sizeof(unsigned char));
for(i = 0; i < (fileSize / sizeof(unsigned char)); i++)
{
printf("0x%x ", (int)buffer2[i]);
}
fclose (ptr);
}
int main (void)
{
WriteBinFile();
ReadBinFile();
printf("\nPress enter to exit\n");
return fgetc(stdin);
}
Run Code Online (Sandbox Code Playgroud)
Write函数使用fwrite()从数据数组中写入字符(包含一个元素),然后关闭文件.读取功能与以前相同,但我添加了一些诊断功能,因此您可以检查文件和字符大小.它还只显示它已读取的数据,而不是缓冲区中的初始化内存.
你也必须关闭文件,否则在你的程序退出之前你不能重新打开它们.
任何问题,只是喊.