fread 二进制文件截断数据

时间:2021-05-04 16:03:51

标签: c binaryfiles fread

我有一个文件,它是由与我的代码在同一台 PC 上的应用程序创建的。这在开头有以下内容:

$ od -c save.data
0000000  \0  \0  \0 006  \0  \0  \0      \0   D  \0   V  \0   E  \0   1
.
.

在C中使用以下代码读取文件:

FILE *encfile;
char inba[8192];  // input file is < 500 bytes so this is plenty big enough

memset(inba, 0, sizeof(inba));
encfile = fopen(argv[1], "rb");
int br = fread(inba, 1, 8192, encfile);
printf ("Bytes read: %d\n", br);

以上正确打印Bytes read: 409

问题在于 inba 变量为“空”,因为我认为读取的第一个字节是 0,它被视为字符串的结尾。文件中有多个 0 值字节。

如何让 C 将其视为 409 字节数组?

数据将被传递给其他期望它作为 char * 变量的函数。

这是字节序问题吗?

1 个答案:

答案 0 :(得分:3)

二进制数据通常不是字符串。自己跟踪尺寸。

此代码将以十六进制转储数组的内容:

// br and inba are the variable in OP's code

for (int i = 0; i < br; i++) {
    printf("%02X", (unsigned char)inba[i]);
    if (i + 1 >= br || i % 16 == 15) putchar('\n'); else putchar(' ');
}
相关问题