2017-04-10 9 views
0

私はユニコード文字の16進値を取り、それを整数に変換してからバイト配列に変換し、次にUTF-8文字列に変換するプログラムに取り組んでいます。たとえば、16進値E2 82 AC(€記号)が小数点で14 844 588であるという事実以外はすべて問題ありませんが、以下に示すWebページ上のコードポイント値を見ると226です130 172、これは大きな違いです。10進数の不一致へのUTF8 16進コーディング

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

あなたは小数でそれらの値を並べ替える場合、彼らは小数に進に変換していません。明らかに私はエンコードを理解していないだけでなく、私は思った。 226 130 172の代わりに、14 844 588

E2 82 ACマップなぜこの不一致は?

ありがとうございます。

+1

可変長バイトシーケンスを数値として直接解釈することはできません。 0x00E282ACは確かに14844588ですが、これはただの偶然です。 – tripleee

+0

16進数のバイトシーケンス '0xE2''0x82''xAC'は、それぞれ「226」「130」「172」の10進数です。単一の数字 '14,844,588'(あなたの質問のスペースだけであるコンマに注意)は、16進数で' 0xE282AC'です。小数は '226.130,172'ではなく' 226''''''''' '' '' '' '' '' '' '' '' '' '' '172''です。あなたは2つの異なることを比較しています。スペースであなたを混乱させています。 –

答えて

2

「16進値E2 82 AC(小文字の記号)は小数点で14 844 588です」という記述は間違っていると思います。

どのようにして16進値E2,82、およびACを解釈しましたか?

ヘクスE2 =進E * 16 +六角2 = 14 * 16 + 2 = 226

ヘクス82 =進8 * 16 +六角2 = 8 * 16 + 2 = 130

16進数のE2 82 AC(€記号)は実際には10進数で226 130 172です。

関連する問題