fread 二进制文件截断数据

fread binary file truncates data

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

$ od -c save.data
0000000  [=10=]  [=10=]  [=10=] 006  [=10=]  [=10=]  [=10=]      [=10=]   D  [=10=]   V  [=10=]   E  [=10=]   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 变量是 'empty',因为我认为读取的第一个字节是 0,它被视为字符串的结尾。文件中有多个 0 个值字节。

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

数据将传递给其他函数,这些函数希望将其作为 char * 变量。

这是字节顺序问题吗?

二进制数据一般不是字符串。自己跟踪尺码。

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

// 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(' ');
}