Как я должен преобразовать значение 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;
}
Другие вопросы по тегам