我正在阅读二进制文件(用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
。
答案 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;