簡體   English   中英

C ++將UTF8字符串轉換為十六進制,反之亦然

[英]C++ convert UTF8 string to hexadecimal and vice versa

utf8將字符串轉換為十六進制字符串需要花費一些時間,向后看,我發現了一些示例和可能的解決方案,但是,只有在沒有特殊字符的情況下,所有示例都可以正常工作。 我有以下幾點:

字符串in =“áéíóúñü”

結果應該是:

“ c3a1c3a9c3adc3b3c3bac3b1c3bc”

我嘗試關注以下內容以及其他內容:

C ++將字符串轉換為十六進制,反之亦然

如何將字符串轉換為十六進制字符串?

http://www.cplusplus.com/forum/beginner/161703/


我會盡力解釋得更好,但我的英語說得不好。 抱歉。

我必須使用套接字發送一些數據。 為此,我必須使用UTF-8將名稱轉換為十六進制,但在某些情況下具有特殊字符,例如á,é,í...。轉換普通字母時,每個字母的字符串長度為2。

a->“ 61”

e->“ 65”

但是(在UTF-8上)特殊字符的編碼長度為4

á->“ c3a1”這是正確的轉換

é->“ c3a9”,這是正確的轉換

我嘗試了所有找到的方法的轉換,包括那些使我失望的方法。 但是每次轉換一個特殊字符都會給我2位數字的答案,這是不正確的。

á->“ e1”這是不正確的

é->“ e9”這是不正確的

循環遍歷std::string對象中的每個“字符”,將其兩位int十六進制等效值輸出為int

對於循環,我建議您研究基於范圍的for循環

要設置要打印的位數,請閱讀有關設置流精度的信息

要將數字打印為十六進制,請閱讀有關基本I / O操作器的信息

要轉換為int閱讀有關static_cast

哦,我建議對單個“字符”使用unsigned char


基於以上的簡單解決方案:

std::string stoh(std::string const& in)
{
    std::ostringstream os;

    for(unsigned char const& c : in)
    {
        os << std::hex << std::setprecision(2) << std::setw(2)
           << std::setfill('0') << static_cast<int>(c);
    }

    return os.str();
}

暫無
暫無

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

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