(uint32_t header;char array[32];) 如何在 c++ 中将数据从 header 复制到数组?如何进行这种转换?我尝试了类型转换,但它似乎不起作用。
问问题
1127 次
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::bitset
which 代表一个固定大小的 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 回答