我应该如何将uint32_t值转换为大小为32的char数组?

时间:2017-07-14 03:07:14

标签: c++ arrays char uint32-t

(uint32_t header; char array [32];) 如何在c ++中将数据从头复制到数组?如何进行这种转换?我尝试过类型广播,但它似乎没有效果。

2 个答案:

答案 0 :(得分: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];
    }
}

这将类似于小端表示。

答案 1 :(得分:0)

我知道这个问题有点老了,但我会写一个可能对其他人有帮助的答案。因此,基本上可以使用function makeSelection(e) { let item = document.querySelectorAll('a'); console.log(item); var test = []; for (var i = 0; i < item.length; i++) { test.push(item[i].children[0].textContent) } console.log(test) }来表示固定大小的N位序列。

使用<a href="#" onclick="makeSelection(this)"> <p>This is p1</p> </a> <a href="#" onclick="makeSelection(this)"> <p>This is p2</p> </a> <a href="#" onclick="makeSelection(this)"> <p>This is p3</p> </a>可以创建代表4字节整数的32位序列。您还可以使用std::bitset函数将这些位转换为std::bitset<32> bits(value)

但是,如果要获得一些更复杂的输出,可以使用以下功能:

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';
}