2017-06-09 27 views
0

<<"0421">>のようなバイナリ値と0x0421という16進数を取得しています。 と私はこの16進値のビット値を取得する必要があります。 であり、2'base表現ではこれは0000 0100 0010 0001です。erlangでバイナリ値を16進数に16進数に変換する方法

だから私はErlangでこのヘクスの各ビットを取得する必要があります。

list_to_integer(binary_to_list())を使用すると、整数が421になります。

このバイナリを最初に16進数に変換してから、その16進数のビット値を取得してください。

+0

'binary_to_integer(<<"0421">>、16)'? – Dogbert

+0

ありがとう@Dogbert、私はerlangに少し新しいです。私が値1057とその整数を得た時点で、それぞれのビットは何かを表しています。ビット0からビット15まで。私は今どのように各ビットを得ることができます。 – ManasP

+0

私はそれを私の答えに加えました。 – Dogbert

答えて

2

binary_to_integer/2は、第2引数としてベースを受け入れます。あなたは整数に六角バイナリに変換することに16を渡すことができ:

1> binary_to_integer(<<"0421">>, 16). 
1057 
2> 16#0421. 
1057 

編集:あなたは、パターンマッチングを使用して、16個の変数に16ビットの各々を抽出することができる:

1> Integer = binary_to_integer(<<"0421">>, 16). 
1057 
2> <<B0:1, B1:1, B2:1, B3:1, B4:1, B5:1, B6:1, B7:1, B8:1, B9:1, B10:1, B11:1, B12:1, B13:1, B14:1, B15:1>> = <<Integer:16>>. 
<<4,33>> 
3> {B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15}. 
{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1} 

B0が今0であり、 B51などです。

0

ドッグベルトのソリューションは、大きな整数で少し面倒かもしれません。シェルで

bits(HexBin) -> 
    bits(
     binary:encode_unsigned(
     binary_to_integer(HexBin, 16) 
    ), 
     [] 
    ). 

bits(<<Bit:1, Rest/bitstring>>, Acc) -> 
    bits(Rest, [Bit|Acc]); 
bits(<<>>, Acc) -> 
    list_to_tuple(lists:reverse(Acc)). 

6> c(my).    
{ok,my} 

7> my:bits(<<"0421">>). 
{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1} 

8> LongResult = my:bits(<<"FFFFFFFFFFFFFF0421">>).   
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...} 

9> io:format("~p~n", [LongResult]). 
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1} 
ok 
2

あなたはここより自動化ソリューションである、Dogbertの提案に基づいて、結果の予想フォーマットについてはあまり言うことはありません。

1> HexToBin = fun(D) -> 
1> S = size(D) * 4, 
1> I = binary_to_integer(D,16), 
1> << <<X>> || <<X:1>> <= <<I:S>> >> 
1> end. 
#Fun<erl_eval.6.52032458> 
2> HexToBin(<<"0421">>). 
<<0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1>> 
3> rp(HexToBin(<<"0abcdef0421">>)). 
<<0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1, 
    0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0, 
    1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1>> 
ok 
4> 
1
1> integer_to_list(binary_to_integer(<<"0421">>, 16),2). 
"10000100001" 
関連する問題