2009-06-08 15 views
5

मेरे पास हेक्साडेसिमल डेटा है जो मुझे 64 हस्ताक्षरित दशमलव डेटा में कनवर्ट करना है .. इसलिए मैंने सोचा था कि इस तरह के कदम उठाए गए हैं। 1.hexadecimal बाइनरी, के बजाय अपने खुद के कोड रूपांतरण लेखन मैं, कैसे इस हिस्से को प्राप्त करने के लिए इस लिंक पर http://necrobious.blogspot.com/2008/03/binary-to-hex-string-back-to-binary-in.htmlहेक्स से 64 हस्ताक्षर दशमलव

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 दशमलव में में दिए गए कोड का उपयोग हूँ।?

या किसी अन्य तरीके से hexdecimal प्राप्त करने के लिए -> 64 हस्ताक्षर दशमलव डेटा

thanx अग्रिम में

उत्तर

11

एक हेक्स स्ट्रिंग के लिए एक पूर्णांक बदलने के लिए, बस erlang:integer_to_list(Int, 16). का उपयोग वापस बदलने के लिए, erlang:list_to_integer(List, 16). का उपयोग इन कार्यों ले 2 से 36 तक एक रेडिक्स मेरा मानना ​​है।

आप के लिए और हेक्स तार से बाइनरी कन्वर्ट करने के लिए आप सूची comprehensions उपयोग कर सकते हैं यह tidier बनाना चाहते हैं:

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. 
+0

thanx के बाद से इस हेक्साडेसिमल मान 3fc2d175e1028b9a के लिए, php में im लेखन कोड अपने दे रही है, तो 4594464874087746458 64 के रूप में दशमलव मान लेकिन जब मैं वही कर रहा हूं जैसा आपने कहा है हेक्स_to_bin (स्ट्र) -><< << (erlang: list_to_integer ([एच], 16)): 4 >> || एच <- Str >>। यह << 63,194,209,117,225,2,139,154 >> दे रहा है। इसलिए इसके लिए कोई स्पष्टीकरण .. कृपया मुझे बताएं कि इस पर क्या गलत है। – Abhimanyu

+0

<> = हेक्स_to_bin ("3fc2d175e1028b9a"), I =: = 4594464874087746458. - आपको बस बाइनरी को एरलांग में एक पूर्णांक में बदलने की आवश्यकता है (<< numbers >> नोटेशन बाइनरी इंगित करता है)। – archaelus

0

इस दृष्टिकोण के बारे में क्या? अपने answer..its मैं क्या need..but मैं एक और संदेह है, का बहुत अच्छा explaination के लिए

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. 
संबंधित मुद्दे