[英]bitset<4> converted to wrong value on Win7 Embedded
我有以下代碼將Sixbit ASCII轉換為ASCII字符串:
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 32位中進行編譯。
當我將其運行到嵌入式Win7中時,我得到以下輸出:
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::cout << buffer[index] << " - " << bset << std::endl;
至
std::cout << +buffer[index] << " - " << bset << std::endl;
這將向您顯示buffer[index]
的數值,而不是該數值表示的任何字符。 我現在不指的是“ Sixbit ASCII”,但是對於純正ASCII,您所看到的結果正是我所期望的:字母f的ASCII碼為0x66,因此低4位確實是0110.您需要將那些字符代碼轉換為數字。 同樣,對於ASCII(以及所有標准字符代碼),可以通過減去'0'
來轉換范圍從'0'
到'9'
'0'
; 從'a'
到'f'
以及從'A'
到'F'
范圍內'a'
值將需要更復雜的查找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.