我想使用C ++填充值为0xFC
的unsigned char数组。我尝试过以下方法,但似乎没有用。
unsigned char buffer[8] = {0xFC};
这似乎将所有内容都放在缓冲区的第一个数组索引中。当我检查缓冲区的值时,下面是Eclipse IDE输出:
buffer[0] = 252 '\374'
buffer[1] = 0 '\000'
buffer[2] = 0 '\000'
buffer[3] = 0 '\000'
buffer[4] = 0 '\000'
buffer[5] = 0 '\000'
buffer[6] = 0 '\000'
buffer[7] = 0 '\000'
我希望如下:
buffer[0] = 1 '\001'
buffer[1] = 1 '\001'
buffer[2] = 1 '\001'
buffer[3] = 1 '\001'
buffer[4] = 1 '\001'
buffer[5] = 1 '\001'
buffer[6] = 0 '\000'
buffer[7] = 0 '\000'
或反过来因为我的平台字节序。
我尝试过的任何其他内容都只是给出了数字的ASCII表示。我不明白这里有一些基本的东西......
答案 0 :(得分:2)
您似乎想要创建一个数组,其元素包含数字的单个位。你可以试试这个:
unsigned char value = 0xFC;
unsigned char bits[CHAR_BIT]; // "bool bits[CHAR_BIT]" would be better
for (size_t i = 0; i != CHAR_BIT; ++i)
{
bits[i] = value % 2;
value /= 2;
}
这是一个没有显式循环的更好的变体:
#include <array>
#include <utility>
template <std::size_t ...I>
constexpr std::array<bool, sizeof...(I)> get_bits(std::index_sequence<I...>,
unsigned char value)
{
return { static_cast<bool>((value >> I) % 2)... };
}
用法:
#include <climits>
#include <iostream>
int main()
{
unsigned int n;
std::cin >> n;
std::cout << "You said: " << n << ", which has bits: ";
for (bool bit : get_bits(std::make_index_sequence<CHAR_BIT>(), n))
std::cout << bit;
std::cout << std::endl;
}
答案 1 :(得分:0)
大多数系统中的unsigned char
是8位,被亲切地称为字节。
8个无符号字符(字节)的数组总共为64位。
您告诉编译器将数组中的第一个插槽分配给0xFC,它就是这样做的。
也许您正在考虑std::bitset
这是一个位数组。
最终结果是什么?