簡體   English   中英

在Win7 Embedded上bitset <4>轉換為錯誤值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM