我有下面这段代码从摩斯电ASCII转换为ASCII字符串:位集合<4>转换为错误值Win7上的嵌入式
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专业32位。
当我运行在嵌入式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
这是怎么回事其中maked是一个问题?转换F
至0100
???不应该是1111
?
课程的最后转换是错误的,由于这个错误convering F
。我试过std::bitset<4> bset((unsigned char) buffer[index])
,结果相同。
帮助赞赏。
除非你需要额外的东西,否则不要使用'std :: endl'。 ''\ n''结束一行。 –
不确定您的意思是“将F转换为0100”?你的意思是“将f转换为0110”?正如Pete指出的那样,这对ASCII是正确的。 'f'的ASCII码是01100110。也许你正在混合十六进制数字F. –
如果你显示了“缓冲区”中的内容并显示了你的预期和你正在使用的六位编码,这将有助于你的问题。维基百科上的样本不包括64个字符中的任何小写字母。 –