Erlang 十六进制到64位有符号十进制

Erlang 十六进制到64位有符号十进制,erlang,Erlang,我有十六进制的数据,我必须转换成64个有符号的十进制数据。所以我想我有如下步骤。 1.从十六进制到二进制, 我没有编写自己的代码转换,而是使用此链接中给出的代码 bin\u to\u hexstr(bin)-> 列表:展平([io_lib:format(“~2.16.0B)”,[X])|| X hexstr_to_bin(S,[])。 hexstr_to_bin([],Acc)-> 列表_到_二进制(列表:反向(Acc)); hexstr_to_bin([X,Y|T],Acc)-> {ok,[V

我有十六进制的数据,我必须转换成64个有符号的十进制数据。所以我想我有如下步骤。 1.从十六进制到二进制, 我没有编写自己的代码转换,而是使用此链接中给出的代码

bin\u to\u hexstr(bin)->
列表:展平([io_lib:format(“~2.16.0B)”,[X])||
X
hexstr_to_bin(S,[])。
hexstr_to_bin([],Acc)->
列表_到_二进制(列表:反向(Acc));
hexstr_to_bin([X,Y|T],Acc)->
{ok,[V],]}=io_lib:fread(“~16u”,[X,Y]),
hexstr_to_bin(T[V|Acc])。
2.从二进制到十进制, 如何实现这一部分

或以任何其他方式实现十六进制->64位有符号十进制数据


thanx预先

要将整数转换为十六进制字符串,只需使用
erlang:integer\u To\u list(Int,16)。
要转换回整数,请使用
erlang:list\u To\u 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 >>.
bin_to_hex(bin)->[hd(erlang:integer_to_list(I,16))|>| | H>。

要将整数转换为包含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.
Int=1 bsl 48,HexStr=bin_to_hex(),
Bin=hex_至_-Bin(HexStr),=Bin,
Int=:=往返力。

这种方法怎么样

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.
hex2int(L)->
>=十六进制至八进制(L),
我
int2hex(I)->[i2h(X)| |。
h2i(X)->
案例X第64波段
64->X波段7+9;
_->X波段15
结束。
当X>9->$a+X-10时i2h(X);
i2h(X)->0+X美元。

thanx谢谢你的回答..这很好地解释了我需要什么..但我还有一个疑问,因为对于这个十六进制值3fc2d175e1028b9a,如果我用php编写代码,它会给出4594464874087746458作为64进制值,但当我做的事情与你所说的十六进制(Str)相同时->| | H>。它正在给出。对此有什么解释吗..请告诉我这有什么错。=hex_to_bin(“3fc2d175e1028b9a”),I=:=4594464874087746458。--您只需要将二进制转换为erlang中的整数(>表示二进制)。
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.