我正在尝试将十六进制0x80 0x94
(utf-8)转换为相应的十进制值2014
是否可以在Erlang中进行转换?
答案 0 :(得分:3)
您无法转换它的原因很简单,它无效UTF-8
。
4> io:format("~.2B~n", [16#80]).
10000000
ok
5> io:format("~.2B~n", [16#94]).
10010100
ok
有关详细信息,请参阅this site上的说明(我向您展示二进制文件,以便您可以看到二进制模式)。但归结为80h
UTF-8
中的UTF-8
是无效的起始值。
我认为你可能想要一个来自unicode:characters_to_list(<<"I am a valid utf8 binary">>, utf8).
二进制文件的unicode代码点,如下所示:
2014
顺便说一下,代码点0xDF 0x9E
是this字符,UTF-8
编码为{{1}}。
答案 1 :(得分:1)
您可以使用二进制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>>
答案 2 :(得分:0)
我对这个问题感到困惑。 (对不起)......
在erlang中,十六进制数字以16#为前缀,所以如果您有16#80或16#94,并且想要将其转换为十进制值,则可以使用integer_to_list(16#AF8,10)