填充无符号字符数组

时间:2014-06-21 17:55:20

标签: c++

我想使用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表示。我不明白这里有一些基本的东西......

2 个答案:

答案 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这是一个位数组。

最终结果是什么?