2017-08-14 6 views
-2

J'ai deux valeurs, 0 et 30, j'ai besoin de stocker sa représentation binaire sur un octet pour chacun. Comme:Comment convertir int en binaire et concaténer comme char en C++

octet 0 = 00000000

octet 1 = 00011110

puis les concaténer sur une chaîne qui imprimera le ASCII 0 (NULL) et 30 (enregistrement séparateur). Donc, ne pas imprimer "030", mais quelque chose que je ne peux pas vraiment ici et ni la commande peut imprimer correctement. Je sais que ce ne sont pas de bonnes choses à imprimer.

je faisais comme ceci:

string final_message = static_cast<unsigned char>(bitset<8>(0).to_ulong()); 
final_message += static_cast<unsigned char>((bitset<8>(answer.size())).to_ulong()); // where answer.size() = 30 
cout << final_message << endl; 

Je ne sais pas si elle est juste, je ne ai jamais travaillé avec bitset depuis maintenant. Je pense que c'est juste mais le serveur qui reçoit mes messages ne cesse de me dire que les chiffres sont faux. Je suis assez sûr que les chiffres dont j'ai besoin sont 0 et 30 sur cet ordre, donc, comme la seule partie je ne sais pas comment cela fonctionne sont ces trois lignes, je pose cette question ici.

Ces trois lignes ont raison? Il y a une meilleure façon de faire ça?

+0

vous devez être très clair sur ce que vous voulez – pm100

Répondre

1

Un octet (ou un char) contient une seule valeur de 8 bits et la valeur est la même que vous le "visualisiez" en format binaire, en format décimal ou en tant que caractère à imprimer sur le console. C'est juste la façon dont vous le regardez.

Voir l'exemple suivant. Les deux premiers exemples byte1 et byte2 sont ceux référencés dans votre question. Malheureusement, vous ne verrez pas grand-chose sur la console. Par conséquent, j'ai ajouté un autre exemple, qui illustre trois façons de visualiser la même valeur 65 de différentes manières. J'espère que cela aide.

int main(){ 

    char byte1 = 0b00000000; 
    char byte2 = 0b00011110; 

    std::cout << "byte1 as 'int value': " << (int)byte1 << "; and as character: " << byte1 << endl; 
    std::cout << "byte2 as 'int value': " << (int)byte2 << "; and as character: " << byte2 << endl; 

    char a1 = 65; 
    char a2 = 'A'; 
    char a3 = 0b001000001; 

    std::cout << "a1 as 'int value': " << (int)a1 << "; and as character: " << a1 << endl; 
    std::cout << "a2 as 'int value': " << (int)a2 << "; and as character: " << a2 << endl; 
    std::cout << "a3 as 'int value': " << (int)a3 << "; and as character: " << a3 << endl; 

    return 0; 
} 

Sortie:

byte1 as 'int value': 0; and as character: 
byte2 as 'int value': 30; and as character: 
a1 as 'int value': 65; and as character: A 
a2 as 'int value': 65; and as character: A 
a3 as 'int value': 65; and as character: A 
0

La ligne

string final_message = static_cast<unsigned char>(bitset<8>(0).to_ulong()); 

ne compile pas. Et évidemment, il n'y a pas besoin de bitset ici car vous êtes essentiellement droit d'ajouter des conversions supplémentaires dans le chemin.

Si je diviser la ligne ci-dessus en 2 et utiliser +=, la chaîne résultante en taille 2 et contenir des caractères avec des valeurs de 0 et 30 (j'ai inspecté en utilisant le débogueur).

Je ne sais pas quel est votre problème car il semble faire ce que vous voulez ...