[英]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.