二进制文件解释

时间:2012-02-10 09:59:06

标签: c++ binary

我正在阅读二进制文件(用c ++编写)。标题是这样的(以十六进制打印)

  

43 27 41 1A 00 00 00 00 23 00 00 00 00 00 00 00 04 63 68 72 31 FFFFFFB4 01 00 00 04 63 68 72 32 FFFFFFEE FFFFFFB7

使用时打印出来:

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

是否有一种有效的方法可以将23字节(?)存储为9th而不使用stringstream?或者stringstream是最好的方式吗?

这样的东西
int n= mem[8]

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

2 个答案:

答案 0 :(得分:5)

你确实在n存储了23。您只看到35因为您正在输出一个例程,将其转换为十进制显示。如果您可以查看计算机内部的二进制数据,您会发现它实际上是十六进制数据。

您将得到与您相同的结果:

 int n=0x23;

(你可能认为你想要的是不可能的。n 1E中应该存储哪个数字?唯一相应的数字是31,这就是你得到的。)

答案 1 :(得分:1)

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

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;