Как перевести unsigned int в 4 байта char, есть ли встроенные функции в c++

имеется hash-функция, которая возвращает unsigned int, его нужно записать в 4 байта unsigned char, как это сделать?


Ответы (2 шт):

Автор решения: Alex F

Предполагая, что b[0] LSB:

unsigned int n = get_value();
unsigned char b[4];

b[0] = static_cast<unsigned char>(n & 0xFF);
b[1] = static_cast<unsigned char>((n>>8) & 0xFF);
b[2] = static_cast<unsigned char>((n>>16) & 0xFF);
b[3] = static_cast<unsigned char>((n>>24) & 0xFF);

Нужен обратный порядок - поменяйте индексы.

Если порядок совпадает с Endianness, можно использовать memcpy:

memcpy(b,&n, sizeof(b));

Для числа 0x11223344 memcpy на компьютере Little Endian даст 44 33 22 11, на компьютере Big Endian даст 11 22 33 44. Если нужен порядок Big Endian, можете использовать ntohl - сработает на любом компьютере.

unsigned int n = get_value();
unsigned int n1 = htonl(n);    // n1 is in network byte order, Big Endian
memcpy(b, &n1, sizeof(b));
→ Ссылка
Автор решения: seacatfx

Можно используя union. Нужно только учесть порядок байтов.

#include <iostream>

int main() {
    union Data {
        unsigned int i_data;
        unsigned char c_data[4];
    };

    Data data1;
    data1.i_data = 0x41424344;

    for( int i = 0; i < 4; i++ ) 
        std::cout << data1.c_data[i];
    std::cout << '\n';
}
→ Ссылка