如何从内存中读取16位值

时间:2018-06-21 15:20:32

标签: c memory endianness

我的内存中有一个4096K二进制文件,格式为little-endian。我想以uint16_t的形式读取几个8位值,该如何以最高效的方式进行呢?

void execute_cart (i6507_t* cpu, uint8_t* memory) {
    // uint16_t start = memory[0xFFFC]; // this address contains a 16 bit value
}

更新:我正在x86-64拱上运行,二进制文件用于旧的8位控制台。

1 个答案:

答案 0 :(得分:1)

您需要分别读取两个字节,并将它们组合成一个uint16_t变量:

unsigned offset = 0xfffc;
uint16_t start = memory[offset];
start |= (uint16_t)memory[offset+1] << 8;

如果 memory开始的地址对齐正确,并且如果偏移量是2的倍数,则可以一次读取:

uint16_t start = *(uint16_t *)&memory[0xfffc];