我无法在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。
答案 0 :(得分:4)
0x84是-124
。它在按位OR运算(整数提升)之前扩展到(int)-124
。而0x00000500 | 0xFFFFFF84
就是你得到的结果。使用无符号类型可以防止扩展时符号扩展。
intptr_t virtAddr = (uint8_t(machine->mainMemory[ptrPhysicalAddr + 1]) << 8)
| uint8_t(machine->mainMemory[ptrPhysicalAddr]);