0x80 0x94
16 進数(utf-8) を対応する 10 進数値に変換しようとしています2014
Erlangでその変換を行うことは可能ですか?
変換できない理由は、単純に無効だからですUTF-8
。
4> io:format("~.2B~n", [16#80]).
10000000
ok
5> io:format("~.2B~n", [16#94]).
10010100
ok
詳細については、このサイトの説明を参照してください (バイナリ パターンを確認できるようにバイナリを表示しています)。しかし、それは80h
で無効な開始値になることになりますUTF-8
。
UTF-8
次のようなバイナリからのユニコードコードポイントが必要だと思います:
unicode:characters_to_list(<<"I am a valid utf8 binary">>, utf8).
ちなみにコードポイントは、エンコーディングに2014
あるこの文字です。0xDF 0x9E
UTF-8
そのためにバイナリutf8
変換を使用できます。あなたの数字がずれているように見えますが:
2> A = <<16#80, 16#94>>.
<<128,148>>
3> <<B/utf8>> = A.
** exception error: no match of right hand side value <<128,148>>
変換は両方の方法で機能するため、これが私が最初に期待するものです。
5> <<2014/utf8>>.
<<223,158>>
私は質問と少し混乱しています。(ごめんなさい)...
erlang では、16 進数は 16# を使用してプレフィックスが付けられるため、16#80 または 16#94 の数値を 10 進数値に変換する場合は、integer_to_list(16#AF8, 10) を使用できます。