在C ++中连接十六进制值

时间:2015-10-29 20:34:20

标签: c++ hex bit-manipulation

我无法在C ++中连接两个十六进制值;

int virtAddr = (machine->mainMemory[ptrPhysicalAddr + 1] << 8) | (machine->mainMemory[ptrPhysicalAddr]);
int physAddr = currentThread->space->GetPhysicalAddress(virtAddr);

对于machine->mainMemory[ptrPhysicalAddr + 1],这会产生0x5。对于machine->mainMemory[ptrPhysicalAddr],这会产生0x84。我期待结果0x584。但是,我得到了0xffffff84。我遵循了这个问题Concatenate hex numbers in C

1 个答案:

答案 0 :(得分:4)

0x84是-124。它在按位OR运算(整数提升)之前扩展到(int)-124。而0x00000500 | 0xFFFFFF84就是你得到的结果。使用无符号类型可以防止扩展时符号扩展。

intptr_t virtAddr = (uint8_t(machine->mainMemory[ptrPhysicalAddr + 1]) << 8)
                   | uint8_t(machine->mainMemory[ptrPhysicalAddr]);