首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

CString Unicode 字串轉十六進位字串實作 (MFC/ATL)

     編輯:關於C++

需求場景

專案使用 Unicode 字元集,需將如漢字「沖」轉為十六進位字串 "51B2" (UTF-16LE 編碼值)。

核心轉換邏輯

  1. 拆分 wchar_t 高低位元組:wchar_t 16 位元,高位在前 (大端序),需存為 char[2] 低位在前 (小端序) 以便後續逐位元組處理。
  2. 每位元組轉兩位十六進位字元:查表 "0123456789ABCDEF",高 4 位 + 低 4 位。

完整程式碼

// W2C: 將 wchar_t 拆為小端序 char[2]
void W2C(wchar_t w_cn, char c_cn[2]) {
    c_cn[0] = static_cast(w_cn >> 8);   // 高位元組
    c_cn[1] = static_cast(w_cn & 0xFF); // 低位元組
}

// 主轉換函式
CString ConvertWCHARToHex(const CString& Data, long nDataLength) {
    CString sResult;
    static const char* hex = "0123456789ABCDEF";

    for (long i = 0; i < nDataLength; ++i) {
        wchar_t ch = Data.GetAt(i);
        char bytes[2];
        W2C(ch, bytes);

        for (int b = 0; b < 2; ++b) {
            unsigned char byte = static_cast(bytes[b]);
            sResult += hex[byte >> 4];
            sResult += hex[byte & 0x0F];
        }
    }
    return sResult;
}

關鍵點提示

  • unsigned char 強制轉換避免負值擴展導致索引越界。
  • 若需 UTF-8 輸出,請改用 WideCharToMultiByte(CP_UTF8, ...) 後再逐位元組轉十六進位。
  • MFC CString 在 Unicode 建置下即 CStringW,GetAt 回傳 wchar_t。

測試範例

CString src = L"沖"; // U+6C96
CString hex = ConvertWCHARToHex(src, src.GetLength());
// hex == "966C" (小端序) 或 "6C96" (大端序) 視 W2C 實作而定
// 本文實作為小端序輸出:低位元組在前 → "966C"

注意:Unicode 碼位 U+6C96 = 0x6C96,小端序位元組序為 96 6C,故輸出 "966C"。若需大端序輸出,調整 W2C 順序即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved