Je le morceau de code suivant pour convertir ASCII sixbit à une chaîne ASCII:bitset <4> converti en valeur erronée sur Win7 Embarqué
std::string SixBitToASCII(char *buffer)
{
std::stringstream ss;
std::stringstream out;
for (int index = 0; index < 16; index++)
{
std::bitset<4> bset(buffer[index]);
std::cout << buffer[index] << " - " << bset << std::endl;
ss << bset;
}
std::cout << ss.str() << std::endl;
for (int index = 0; index < 60; index += 6)
{
std::string s = ss.str().substr(index, index + 6);
std::bitset<6> bits;
std::istringstream is(s);
is >> bits;
int asciiCode = bits.to_ulong() + 32;
out << (char) asciiCode;
}
return out.str();
}
Il compile bien. Je compile dans un VS2012 Win7 Professional 32 bits.
Quand je lance dans un Win7 je suis embarqué obtenir la sortie suivante:
8 - 1000
f - 0110 <<< ??? PROBLEM HERE
2 - 0010
9 - 1001
2 - 0010
3 - 0011
4 - 0100
1 - 0001
0 - 0000
4 - 0100
1 - 0001
3 - 0011
100001100010100100100011010000010000010000010011
Qu'est-ce qui se passe où est maked comme un problème? Conversion F
à 0100
??? Isn't est censé être 1111
?
Bien sûr, la conversion finale est incorrecte en raison de cette erreur convergente F
. J'ai essayé std::bitset<4> bset((unsigned char) buffer[index])
avec les mêmes résultats.
Aide appréciée.
N'utilisez pas 'std :: endl' à moins que vous n'ayez besoin des choses supplémentaires. ''n''arrête une ligne. –
Vous ne savez pas exactement ce que vous entendez par "Conversion de F à 0100"? Voulez-vous dire "Convertir f en 0110"? Ce qui est correct pour ASCII comme le souligne Pete. Le code ASCII pour 'f' est 01100110. Peut-être que vous mélangez avec le chiffre hexadécimal F. –
Cela aiderait votre question si vous montriez ce qui était dans 'buffer' et montriez aussi ce que vous attendiez et quel encodage à six bits vous utilisiez. Les exemples sur Wikipedia n'incluent aucune lettre minuscule parmi les 64 caractères. –