2014-06-21 60 views
-3

我想补无符号的字符阵列使用C++的值0xFC。我已经尝试了以下,但它似乎没有工作。填充无符号的字符阵列

unsigned char buffer[8] = {0xFC}; 

这似乎把一切都放在缓冲区中的第一个数组索引。下面是Eclipse IDE输出,当我检查的缓冲区的值:因为我的平台字节序

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' 

或反向:

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' 

我希望以下。

别的,我尝试过给我的数字的ASCII表示。有一些基本的东西我不理解......

+0

你会期望它将值分成它的组成位,然后在每个字节中放一位? –

+2

你可能会使用std :: fill –

+2

这个期望是完全疯狂的。那个是从哪里来的?!你有*字符*的数组! –

回答

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; 
} 
+0

可能有一些'std :: index_sequence'种可变的constexpr解决方案,但我还没有看到它。 –

+0

好吧,存在'std :: bitset'。 – Rapptz

+0

这工作正常。 –

0

unsigned char在大多数系统中是8位,亲切地称为一个字节。

8的阵列,无符号字符(字节)是64位总数。

你告诉编译器的阵列0xFC有,它确实在指定第一个插槽。

也许你正在考虑std::bitset这是一组位。

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

+0

我希望最终的结果在一个字节中是252 - 它所做的。我错误地认为每个数组索引都会有点不同。 – larrylampco