我有十六进制数据我必须转换为64个有符号十进制数据..所以我认为有这样的步骤。 1.十六进制到二进制, 而不是使用此链接http://necrobious.blogspot.com/2008/03/binary-to-hex-string-back-to-binary-in.html
中给出的代码编写自己的代码转换bin_to_hexstr(Bin) ->
lists:flatten([io_lib:format("~2.16.0B", [X]) ||
X <- binary_to_list(Bin)]).
hexstr_to_bin(S) ->
hexstr_to_bin(S, []).
hexstr_to_bin([], Acc) ->
list_to_binary(lists:reverse(Acc));
hexstr_to_bin([X,Y|T], Acc) ->
{ok, [V], []} = io_lib:fread("~16u", [X,Y]),
hexstr_to_bin(T, [V | Acc]).
2.binary to decimal, 如何实现这一部分。?
或实现十六进制的任何其他方式 - &gt; 64个有符号十进制数据
提前thanx
答案 0 :(得分:11)
要将整数转换为十六进制字符串,只需使用erlang:integer_to_list(Int, 16).
要转换回来,请使用erlang:list_to_integer(List, 16).
这些函数的基数从2到36我相信。
如果要将二进制文件与十六进制字符串进行转换,可以使用列表推导使其更整洁:
bin_to_hex(Bin) -> [ hd(erlang:integer_to_list(I, 16)) || << I:4 >> <= Bin ].
hex_to_bin(Str) -> << << (erlang:list_to_integer([H], 16)):4 >> || H <- Str >>.
要将整数转换为包含64位有符号整数的十六进制字符串,您现在可以执行以下操作:
Int = 1 bsl 48, HexStr = bin_to_hex(<<Int:64/signed-integer>>),
Bin = hex_to_bin(HexStr), <<RoundTrippedInt:64/signed-integer>> = Bin,
Int =:= RoundTrippedInt.
答案 1 :(得分:0)
这种做法怎么样?
hex2int(L) ->
<< I:64/signed-integer >> = hex_to_bin(L),
I.
int2hex(I) -> [ i2h(X) || <<X:4>> <= <<I:64/signed-integer>> ].
hex_to_bin(L) -> << <<(h2i(X)):4>> || X<-L >>.
h2i(X) ->
case X band 64 of
64 -> X band 7 + 9;
_ -> X band 15
end.
i2h(X) when X > 9 -> $a + X - 10;
i2h(X) -> $0 + X.