Как я должен преобразовать значение uint32_t в массив символов размером 32?
(заголовок uint32_t; массив символов [32];) как скопировать данные из заголовка в массив в C++? как осуществить это преобразование? Я пробовал тип-трансляцию, но, похоже, она не работает.
1 ответ
Используйте std::bitset, чтобы получить двоичное представление и преобразовать его в массив char:
#include <iostream>
#include <cstdint>
#include <bitset>
int main()
{
std::uint32_t x = 42;
std::bitset<32> b(x);
char c[32];
for (int i = 0; i < 32; i++)
{
c[i] = b[i] + '0';
std::cout << c[i];
}
}
Это будет похоже на представление с прямым порядком байтов.
Я знаю, что этот вопрос немного устарел, но я напишу ответ, который может помочь кому-то другому. Итак, в основном вы можете использоватьstd::bitset
который представляет последовательность фиксированного размера из N бит.
С std::bitset<32> bits(value)
вы можете создать последовательность из 32 бит, представляющую 4-байтовое целое число. Вы также можете использоватьstd::bitset::to_string
функция, чтобы преобразовать эти биты в std::string
.
Однако, если вы хотите получить более сложный вывод, вы можете использовать следующую функцию:
void u32_to_binary(uint32_t const& value, char buffer[]) {
std::bitset<32> bits(value);
auto stringified_bits = bits.to_string();
size_t position = 0;
size_t width = 0;
for (auto const& bit : stringified_bits) {
width++;
buffer[position++] = bit;
if (0 == width % 4) {
buffer[position++] = ' ';
width = 0;
}
}
buffer[position] = '\0';
}
что создаст такой вывод:
0000 0000 0000 0000 0000 0000 0001 1100
Вот как это можно использовать:
#include <iostream>
#include <bitset>
int main() {
char buff[128];
u32_to_binary(28, buff);
std::cout << buff << std::endl;
return 0;
}