2

我正在尝试将十六进制0x80 0x94(utf-8)转换为相应的十进制值2014

是否可以在 Erlang 中进行这种转换?

4

3 回答 3

3

您无法转换它的原因仅仅是它无效UTF-8

4> io:format("~.2B~n", [16#80]).
10000000
ok
5> io:format("~.2B~n", [16#94]).
10010100
ok

有关详细信息,请参阅此站点上的描述(我向您展示二进制文件,以便您查看二进制模式)。但归结80hUTF-8.

UTF-8我认为您可能想要来自二进制文件的 unicode 代码点,如下所示:

unicode:characters_to_list(<<"I am a valid utf8 binary">>, utf8).

顺便说一句,代码点是正在编码2014这个字符。0xDF 0x9EUTF-8

于 2013-05-29T22:14:10.077 回答
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>>
于 2013-05-28T07:54:37.613 回答
0

我对这个问题有点困惑。(对于那个很抱歉)...

在 erlang 中,十六进制数字使用 16# 作为前缀,所以如果你有数字 16#80 或 16#94 并且你想将其转换为十进制值,你可以使用 integer_to_list(16#AF8, 10)

于 2013-05-28T02:45:22.663 回答