2017-02-24 21 views
3

バイナリ文字列を受け取り、16進数に変換する関数を作成しようとしています。これまでは、intを16進数に変換できる関数しか作成できませんでした。ここでバイナリを16進数に変換する

は私が持っているものです。

def intToHex(num): 
    num = abs(num) 
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} 
    rlist=[] 
    while(num!=0): 
     rlist.append(num%16) 
     num//=16 
    rlist=rlist[::-1] 
    for idx, val in enumerate(rlist): 
     rlist[idx] = symdict.get(val, str(val)) 

    print(''.join(rlist)) 

intToHex(4512) 

サンプル出力:11A0

はどのように16進数に変換し、バイナリ組み込みコマンドを使用せずに、機能を作ることができます。その目的のために上記の関数を変更することは可能ですか?

+2

基本的には、ベースnの数値を数値ベースmに変換する方法です。あなたの答えでは、ベース10からベース16に移動しました。ベース2からベース16に変更する必要があります。本質的に、ロジックの半分が完成しました:) – aydow

答えて

2

すでにここで、六角にint型持っているので、いくつかのバイナリ文字列のルーチンです:

コード:

def bin_to_int(bin): 
    return sum([(1 << i) for i, c in enumerate(reversed(bin)) if c == '1']) 

def int_to_bin(num): 
    bin = '' 
    while num: 
     bin = '01'[num & 1] + bin 
     num = num >> 1 
    return bin 

テストコード:

print(bin_to_int('1001')) 
print(int_to_bin(bin_to_int('1001'))) 

を生成します:

9 
1001 
2

あなたはまずとをINT のInt進(あなたのコード)に直接進数にバイナリ変換するには、いくつかのロジックを開発するバイナリに変換し、既存の機能にいくつかのコードを追加することができます。

2

この機能は私のライブラリからのものです。このライブラリはlibZライブラリと呼ばれます。この関数は、百万桁の16進数をバイナリに変換することができ、Pythonが文字列をどのくらいの長さにするかだけに制限されます。

機能の仕組みを理解したい場合は、16進数を2進数に変換する件について非常に詳細な記事を書いています。記事はhttp://kevinhng86.iblog.website/2017/01/27/working-with-number-converting-binary-and-hexadecimal-python/にあります。

def binhexZ(invalue): 
    wmap = {"0000": "0", 
      "0001": "1", 
      "0010": "2", 
      "0011": "3", 
      "0100": "4", 
      "0101": "5", 
      "0110": "6", 
      "0111": "7", 
      "1000": "8", 
      "1001": "9", 
      "1010": "A", 
      "1011": "B", 
      "1100": "C", 
      "1101": "D", 
      "1110": "E", 
      "1111": "F" 
      } 
    i = 0 
    output = "" 

    while (len(invalue) % 4 != 0): 
     invalue = "0" + invalue 

    while (i < len(invalue)): 
     output = output + wmap[invalue[i:i + 4]] 
     i = i + 4 

    output = output.lstrip("0") 
    output = "0" if len(output) == 0 else output 

    return output 
関連する問題