У меня есть следующий фрагмент кода для преобразования из шестибитной ASCII в строку ASCII:BitSet <4> преобразуется в неправильное значение на Win7 Embedded
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();
}
Это компилирует нормально. Я компилирую в VS2012 Win7 Professional 32bits.
Когда я запускаю его в встроенном Win7 I'm получает следующий результат:
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
Что происходит, где, как цветовая проблема? Преобразование F
в 0100
??? Разве не должно быть 1111
?
Конечно, окончательное преобразование неверно из-за этой ошибки, конвертирующей F
. Я пробовал std::bitset<4> bset((unsigned char) buffer[index])
с такими же результатами.
Помогите оценить.
Не используйте 'std :: endl', если вам не нужен дополнительный материал, который он делает. '' \ n'' заканчивает линию. –
Не знаете, что вы подразумеваете под «Преобразование F в 0100»? Возможно, вы имели в виду "Converting f to 0110"? Что правильно для ASCII, как указывает Пит. Код ASCII для 'f' равен 01100110. Может быть, вы смешаетесь с шестнадцатеричной цифрой F. –
Это поможет вашему вопросу, если вы показали, что было в «буфере», а также показали, что вы ожидали, и какую шестибитную кодировку вы использовали. Образцы в Википедии не содержат никаких строчных букв среди 64 символов. –