2016-11-11 38 views
0

我發現了一個解釋爲十六進制的表示解碼成十進制數,但只能通過使用Qt: How to get decimal value of a unicode character in c++C++:將UTF-16字符的十六進制表示爲十進制(如Python的INT(hex_data,16))

由於我不是使用Qt和cout << (int)c工作(編輯:它,如果你正確地使用它實際上沒有工作..!)

如何做到以下幾點:

我得到了它經一些插座傳輸的兩個字符的十六進制表示(只是想出瞭如何獲得六角再版終於..!)出發,按照UTF16-表示雙方合併產:

char c = u"\0b7f" 

這將被轉換爲它的utf16十進制值! (看到它在UTF-表http://www.fileformat.info/info/unicode/char/0b7f/index.htm

這應該是絕對基本的東西,但作爲一個指定的Python開發不得不使用C++的一個項目,我掛這個問題了幾個小時....

+2

在幾乎所有的系統上,字符都不會包含完整的utf16字符。 UTF16是2/4字節,而字符是1。另外,轉換是什麼意思?這些數字在計算機上都以相同的方式表示。 – Nonanon

+1

'char'只有1個字節,如果你使用的是C++ 11及更高版本,你可能想要使用'wchar_t',它在Windows上是2個字節,在Posix上是4個,或者'char16_t'是平臺獨立的。然後,您可以將該變量轉換爲「int」來獲取數值。 –

+0

你是絕對正確的,只是編輯我的問題....兩個字符組合給我這個utf16表示....我只想從「\ 0b7f」(見char表)中獲得十進制值「2943」。 –

回答

1

使用更寬的字符類型(char僅8位,您至少需要16位),以及UTC文字的正確格式。這有效(live demo):

#include <iostream> 

int main() 
{ 
    char16_t c = u'\u0b7f'; 

    std::cout << (int)c << std::endl; //output is 2943 as expected 

    return 0; 
} 
+0

作品!在反斜槓後忘記「u」!我有你的「\ 0b7f」而不是你的「\ u0b7f」....非常感謝,我應該更快地在stackoverflow上問,因爲我失去了約。 6小時這個廢話 –

相關問題