填充无符号字符数组 我想用C++来填充一个值为0xFC的无符号字符数组。我试过以下方法,但似乎不起作用 unsigned char buffer[8] = {0xFC};

填充无符号字符数组 我想用C++来填充一个值为0xFC的无符号字符数组。我试过以下方法,但似乎不起作用 unsigned char buffer[8] = {0xFC};,c++,C++,这似乎将所有内容都放在缓冲区的第一个数组索引中。下面是我检查缓冲区值时的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 '

这似乎将所有内容都放在缓冲区的第一个数组索引中。下面是我检查缓冲区值时的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表示。这里有一些基本的东西我不理解

您似乎想要创建一个数组,其元素包含数字的各个位。您可以尝试以下方法:

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;
}
在大多数系统中,无符号字符是8位,亲切地称为字节

8个无符号字符字节的数组总共是64位

您正在告诉编译器将数组中的第一个插槽分配给0xFC,它就是这样做的

也许您正在考虑std::bitset,它是一个位数组


您想要什么作为最终结果?

您希望它将值拆分为组成位,然后在每个字节中放入一位?您可以使用std::fill。这种期望完全不合理。那是从哪里来的?!你有一系列的角色!我不明白:0xFC==252=={octall}374。单字节值没有尾数问题。您对数字的数量或表示有问题吗?可能有一些std::index_序列类型的变量constexpr解决方案,但我还没有完全看到。嗯,std::bitset存在。是的,这就是我想要的。这比我以前的疯狂更有意义…@Rapptz:啊,非常有趣。请围绕这个问题发布一个答案!我认为展示std::bitset的好代码片段太少了,我希望最终结果是一个字节中252个,事实就是如此。我错误地认为每个数组索引都有一点小。