Как перевести 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';
}