我们说我有一个包含这个的二进制文件:
0b 10 00 00 06 00 00 1a 66 32 2e 74 78 74 70 6f
72 ....
我使用hexdump -C文件来获取这些值。
如何读取前八个字节并将它们放入一个数组并将它们转换为整数?最后我想要一个int mybytes [8],其中包含:
mybytes[0] = 11
mybytes[1] = 16
.....
mybytes[4] = 6
.....
mybytes[7] = 26.
我尝试使用以下方法读取这八个字节:
unsigned char mybytes[8];
fread(mybytes, 8, 1, myfile);
我甚至可以打印出我需要的值:
for (k=0; k<4; k++)
printf("%d\n", mybytes[k]);
但我需要实际使用这些值。我不明白角色是如何运作的,所以我在这里有点困惑。我正在考虑将它们全部写在一个临时文本文件中,然后将它们作为整数阅读......但我相信必须有更好的方法。
此外,但没有必要。是否可以一次读取四个字节并找到它们的十进制值?例如,作为一个整体阅读0b 10 00 00
并且值为4107?我知道如何计算它们,如果我在数组中分别有这四个值(无论是十六进制还是十进制,是的,我知道十六进制中的整数将是0000100b),但我想知道是否有更快的速度这样做的方式。
答案 0 :(得分:1)
假设文件是本机字节序,则根本不需要使用字节数组,只需这样做:
int foo;
fread(&foo, sizeof(int), 1, myfile);
printf("%d", foo);
它将直接写入int。 凭借fread一次读取多个对象的能力,还可以使用以下代码一次性填充整个数组(这种用法由@lurker提供):
int N = 4; // Change this to the number of ints in the file
int foo[N];
fread(data, sizeof(int), N, myfile);
for(int iter = 0; iter < N iter++)
{
printf("%d", foo[iter]);
}