簡體   English   中英

將Unicode值分配給char

[英]Assign Unicode values to char

我的代碼包含一個循環,其中檢查std::string每個字符,並將其分配給char變量,當-1 >= c >= 255時,該變量將斷言。

這是JSON解析器類中的方法,不是我的:

static std::string UnescapeJSONString(const std::string& str)
{
    std::string s = "";

    for (int i = 0; i < str.length(); i++)
    {
        char c = str[i]; // << HERE FAILS WHEN 'É' CHARACTER
        if ((c == '\\') && (i + 1 < str.length()))
        {
            int skip_ahead = 1;
            unsigned int hex;
            std::string hex_str;

            switch (str[i+1])
            {
                case '"' :  s.push_back('\"'); break;
                case '\\':  s.push_back('\\'); break;
                case '/' :  s.push_back('/'); break;
                case 't' :  s.push_back('\t'); break;
                case 'n' :  s.push_back('\n'); break;
                case 'r' :  s.push_back('\r'); break;
                case 'b' :  s.push_back('\b'); break;
                case 'f' :  s.push_back('\f'); break;
                case 'u' :  skip_ahead = 5;
                    hex_str = str.substr(i + 4, 2);
                    hex = (unsigned int)std::strtoul(hex_str.c_str(), nullptr, 16);
                    s.push_back((char)hex);
                    break;

                default: break;
            }

            i += skip_ahead;
        }
        else
            s.push_back(c);
    }

    return Trim(s);
}

如何將Unicode值分配給char? 在這種情況下,值是É ,並且代碼尚未准備好接收此類字符。

這包含在dll庫中,並給了我這個錯誤:

在此處輸入圖片說明

std :: string不使用Unicode。 這很明顯,因為有一個方法c_str,它使您可以從std :: string獲取一個char數組。

回答您的問題,您的測試是錯誤的:

-1 >= c && c >= 255

它應該是:

-1 <= c && c <= 255

但是由於字符已簽名,因此您無法在接近255的任何地方獲得c。 如果要從一個字符中獲取255,則必須為

unsigned char

但是,這不會讓您達到-1。

在這里閱讀有關char *的信息:

http://www.cplusplus.com/doc/tutorial/variables/

在這里查看char數組:

http://www.cplusplus.com/doc/tutorial/ntcs/

在這里看到std :: string:

http://www.cplusplus.com/reference/string/string/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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