Я делаю эмулятор для Intel 8080. Один из кодов операций требует 16-битного адреса путем объединения регистров b
и c
(оба 1 байт). У меня есть структура с регистрами, расположенными рядом друг с другом. Я объединяю два регистра следующим образом:
using byte = char;
struct {
... code
byte b;
byte c;
... code
} state;
...somewhere in code
// memory is an array of byte with a size of 65535
memory[*reinterpret_cast<short*>(&state.b)]
Я думал, что могу просто OR
их вместе, но это не работает.
short address = state.b | state.c
Еще один способ, которым я пытался это сделать, - создать шорт и установить 2 байта по отдельности.
short address;
*reinterpret_cast<byte*>(&address) = state.b;
*(reinterpret_cast<byte*>(&address) + 1) = state.c;
Есть ли лучший/безопасный способ добиться того, что я пытаюсь сделать?