2017-04-10 134 views
0

我正在研究一個程序,該程序採用unicode字符的十六進制值並將其轉換爲整數,然後轉換爲字節數組,然後轉換爲UTF-8字符串。除了例如十進制值E2 82 AC(€符號)爲14 844 588這一事實外,所有情況都沒有問題,但如果您在下面提供的網頁上查看它的代碼點值,則它是226 130 172,這是一個很大的差異。UTF8十六進制代碼點到十進制不匹配

http://utf8-chartable.de/unicode-utf8-table.pl?start=8320&number=128&names=-

如果他們用十進制值進行排序,他們不只是轉換十六進制到十進制。顯然,我不明白編碼以及我以爲我做的。

E2 82 AC映射到226 130 172,而不是14 844 588

爲什麼這種差異?

在此先感謝。

+1

您無法直接將可變長度字節序列解釋爲數字。 0x00E282AC確實是14844588,但這只是巧合。 – tripleee

+0

十六進制中的字節序列「0xE2」0x82「0xAC」分別是「226」,「130」,「172」。單個數字'14,844,588'(請注意逗號,它們只是您問題中的空格)是十六進制的「0xE282AC」。十進制數是「226」,「130」,「172」而不是「226,130,172」。你正在比較兩種不同的東西。你讓空間混淆你。 –

回答

2

我想你的陳述「十二進制值E2 82 AC(€符號)是14 844 588」是不正確的。

你是如何解釋十六進制值E2,82AC

六角E2 =進制E * 16 +進制2 = 14 * 16 + 2 = 226。

六角82 =進制8 * 16 +進制2 = 8×16 + 2 = 130。

十六進制AC =十六進制A * 16 +十六進制C = 10 * 16 + 12 = 172。

因此十六進制值E2 82 AC(€符號)實際上是十進制的226 130 172。