Как переместить байты переменной в сборке - PullRequest
0 голосов
/ 30 января 2020

У меня есть назначение для моего класса организации компьютера, где мне нужно переместить каждый байт 4-байтового шестнадцатеричного значения, назначенного переменной с именем i1 (0xaabbccee), в 4 различные переменные (c1, c2, c3, c4). Как узнать, какой байт старшего порядка, а какой младшего, потому что он хочет, чтобы байты были сохранены в заданную переменную c, определяемую их порядком. После определения порядка байтов, как мне сохранить только ОДИН байт длинной i1 в другую переменную?

Ответы [ 2 ]

4 голосов
/ 30 января 2020

Если вы используете типы C ++ правильного размера для хранения ваших значений:

uint32_t hex_val = 0xaabbccee;

, вам не нужно беспокоиться о порядке байтов, просто снимите значения по одному:

uint8_t bytes[4];
for (size_t i = 0; i < 4; ++i) {
    bytes[i] = static_cast<uint8_t>(hex_val & 0xff);
    hex_val  >>= 8;
}
1 голос
/ 30 января 2020

В Visual Studio вы можете использовать анонимные структуры внутри анонимных объединений. Итак, пусть компилятор с битовыми полями сделает свою работу:

#include <iostream>

using namespace std;

int main ()
{
    union
    {
        unsigned int i1;
        struct { unsigned c4:8, c3:8, c2:8, c1:8; };
    };

    i1 = 0xaabbccee;
    cout << "i1: " << hex << i1 << endl;
    cout << "c1: " << hex << c1 << endl;
    cout << "c2: " << hex << c2 << endl;
    cout << "c3: " << hex << c3 << endl;
    cout << "c4: " << hex << c4 << endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...