Erlang十六进制字符串为ascii字符串

use*_*635 1 erlang hex ascii

我在erlang中将十六进制字符串转换为ascii字符串时遇到问题.

例:

我的字符串:45474D31303930303031

解析所需的值: EGM1090001

这样做的最佳方法是什么?

Odo*_*rus 6

我宁愿为这种转换创建函数.的种类:

hex2s(HStr) -> hex2s(HStr,[]).

hex2s([X1,X2|Rest], Acc) ->  hex2s(Rest, [ hv(X1) * 16 + hv(X2) |Acc ]);
hex2s([], Acc)           -> lists:reverse(Acc).

hv($0) -> 0;
hv($1) -> 1; 
hv($2) -> 2;
hv($3) -> 3; 
hv($4) -> 4; 
hv($5) -> 5; 
hv($6) -> 6; 
hv($7) -> 7; 
hv($8) -> 8; 
hv($9) -> 9; 
hv($A) -> 10; 
hv($B) -> 11; 
hv($C) -> 12;
hv($D) -> 13; 
hv($E) -> 14; 
hv($F) -> 15.
Run Code Online (Sandbox Code Playgroud)

测试:

hex2s( "45474D31303930303031").

"EGM1090001"

  • 我同意`io_lib`太重了.但是这里发布的解决方案也不需要所有`hv/1`子句.相反,第一个`hex2s/2`子句可以调用`list_to_integer([X1,X2],16)`来代替对`hv/1`的调用和相关的算术.它的速度和代码要少得多. (2认同)