在C中读取二进制文件

MyN*_*ame 0 c binaryfiles

我有文件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)

Cod*_*lla 9

你得到了正确的答案.您已经写了文件"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()从数据数组中写入字符(包含一个元素),然后关闭文件.读取功能与以前相同,但我添加了一些诊断功能,因此您可以检查文件和字符大小.它还只显示它已读取的数据,而不是缓冲区中的初始化内存.

你也必须关闭文件,否则在你的程序退出之前你不能重新打开它们.

任何问题,只是喊.