繁体   English   中英

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

[英]how should i convert a uint32_t value into a char array of size 32?

(uint32_t header;char array[32];) 如何在 C++ 中将数据从标头复制到数组? 如何进行这种转换? 我试过类型转换,但它似乎不起作用。

使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM