-4

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

4

2 回答 2

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

这将类似于 little-endian 表示。

于 2017-07-14T03:21:47.513 回答
0

我知道这个问题有点老了,但我会写一个可能对其他人有帮助的答案。所以,基本上你可以使用std::bitsetwhich 代表一个固定大小的 N 位序列。

std::bitset<32> bits(value)您可以创建一个代表 4 字节整数的 32 位序列。您还可以使用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;
}
于 2020-01-14T09:55:38.430 回答