如何从内存中读取 16 位值
How to read a 16 bit value from memory
我在内存中有一个 4096K 的二进制文件,采用小端格式。我想读取几个 8 位值作为 uint16_t
我该如何以最高效的方式进行读取?
void execute_cart (i6507_t* cpu, uint8_t* memory) {
// uint16_t start = memory[0xFFFC]; // this address contains a 16 bit value
}
更新:我在 x86-64 架构上 运行,二进制文件适用于旧的 8 位控制台。
您需要分别读取两个字节并将它们组合成一个 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];
我在内存中有一个 4096K 的二进制文件,采用小端格式。我想读取几个 8 位值作为 uint16_t
我该如何以最高效的方式进行读取?
void execute_cart (i6507_t* cpu, uint8_t* memory) {
// uint16_t start = memory[0xFFFC]; // this address contains a 16 bit value
}
更新:我在 x86-64 架构上 运行,二进制文件适用于旧的 8 位控制台。
您需要分别读取两个字节并将它们组合成一个 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];