我有一个文件,它是由与我的代码在同一台 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 *
变量的函数。
这是字节序问题吗?
答案 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(' ');
}