二进制文件解释

Binary File interpretation

本文关键字:解释 二进制文件      更新时间:2023-10-16

我正在读取一个二进制文件(在c++中)。标题是这样的(以十六进制打印)

43 27 41 1A 00 00 00 23 00 00 00 00 04 63 68 72 31 ffffff b4 01 00 00 04 68 72 32 ffffff ee ffff b7

打印时使用:

std::cout << hex << (int)mem[c];

有没有一种有效的方法可以在不使用stringstream的情况下将23(即9th字节(?))存储为整数?还是stringstream是最好的方式?

类似的东西

int n= mem[8]

我想将23存储在n中,而不是35中。

您确实在n中存储了23。您只能看到35,因为您使用一个将其转换为十进制显示的例程来输出它。如果你能看看电脑里的二进制数据,你会发现它实际上是一个十六进制23。

你会得到和你一样的结果:

 int n=0x23;

(你可能认为你想要的是不可能的。1En中应该存储什么数字?唯一对应的数字是31,这就是你得到的。)

您的意思是要将该值视为二进制编码的十进制吗?在这种情况下,您可以使用以下方法进行转换:

unsigned char bcd = mem[8];
unsigned char ones = bcd % 16;
unsigned char tens = bcd / 16;
if (ones > 9 || tens > 9) {
    // handle error
}
int n = 10*tens + ones;