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(' ');
}
我有一个文件,它是由与我的代码位于同一台 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(' ');
}