2014-06-21 8 views
-3

Je souhaite remplir un tableau char non signé avec la valeur 0xFC en utilisant C++. J'ai essayé ce qui suit, mais cela n'a pas semblé fonctionner.Remplissage d'un tableau Char non signé

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

Cela semble placer tout dans le premier index de tableau dans le tampon. Ci-dessous la sortie IDE Eclipse lorsque je contrôler la valeur du tampon:

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' 

je me attends à ce qui suit:

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' 

ou l'inverse à cause de mon plates-formes boutisme.

Tout ce que j'ai essayé me donne simplement la représentation ASCII des nombres. Il y a quelque chose de fondamental que je ne comprends pas ici ...

+0

Vous vous attendez à ce qu'il divise la valeur en ses bits constitutifs, puis mettre un bit dans chaque octet? –

+2

Vous pourriez utiliser std :: fill –

+2

Cette attente est complètement folle. D'où vient cela?! Vous avez un tableau de * caractères *! –

Répondre

2

Vous semblez vouloir créer un tableau dont les éléments contiennent des bits individuels d'un nombre. Vous pouvez essayer ceci:

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

est ici une variante un peu plus agréable sans une boucle explicite:

#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)... }; 
} 

Utilisation:

#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

Il y a probablement une sorte de solution constiptive variée 'std :: index_sequence', mais je ne la vois pas encore. –

+0

Eh bien, 'std :: bitset' existe. – Rapptz

+0

Cela fonctionne bien. –

0

Un unsigned char dans la plupart des systèmes est 8 bits, affectueusement connu sous le nom un octet.

Un tableau de 8 caractères non signés (octets) est un total de 64 bits.

Vous demandez au compilateur d'affecter le premier emplacement du tableau à 0xFC, ce qu'il a fait. Peut-être que vous envisagez std::bitset qui est un tableau de bits.

Que voulez-vous comme résultat final?

+0

Je voulais que le résultat final soit 252 dans un octet - ce qui a été le cas. Je pensais à tort que chaque index de tableau serait un peu. – larrylampco

Questions connexes