从十六进制到二进制转换的输出返回非字符串数?

时间:2017-03-30 23:41:00

标签: python binary bit-manipulation

如何在将十六进制值转换为二进制字符串后获得返回值?

我总是得到字符串二进制文件,这对于位操作没用。

bin(int(str('0x460001'), 16))总是0b10001100000000000000001,而我希望0b10001100000000000000001作为输出。

对于那个二进制值,我想执行一个需要非字符串值的操作,如:

0b10001100000000000000001 | 0b10001100100000000000001

如果我可以使用任何选项或库,请告诉我。

1 个答案:

答案 0 :(得分:1)

你可能会惊讶地发现问题根本不是问题,因为:

print( type(0b10001100100011000000001) )

# gives: <class 'int'> (or int in Python 2) 

0b10001100100011000000001是一个数字,而不是字符串...... 所以你可以直接用它做二进制操作。

试试这个:

print( 0x460001 == 0b10001100000000000000001 ) # gives True
print( 0x460001 == 4587521 )                   # gives also True
print( 4587521  == 0b10001100000000000000001 ) # gives True

或者这个:

print( type(0x460001), type(0b10001100000000000000001), type(4587521) )
# gives <class 'int'> <class 'int'> <class 'int'>

如何编写一个数字,它将是相同的数字,但

print( "0x460001" == 0b10001100000000000000001 ) # gives False

会给你False,因为"0x460001"是一个字符串而不是一个数字。

无论如何,在您了解上述内容之前,您可以使用以下代码段:

def bitwiseORforBinaryNumbers(bin1, bin2):
  return bin( bin1 | bin2 )

print( bitwiseORforBinaryNumbers(
   0b10001100000011000000001, 
   0b10001100100000000000001) )
#  0b10001100100011000000001

或直接写:

print( 
  bin( 0b10001100000011000000001 | 
       0b10001100100000000000001 ) ) 
#      0b10001100100011000000001

对于具有数字二进制表示的字符串,情况如下:

def bitwiseORforStringsWithBinaryValue(binStr1, binStr2):
  return bin(int(binStr1,2) | int(binStr2,2))

print( bitwiseORforStringsWithBinaryValue("0b10001100000011000000001", "0b10001100100000000000001") )
# gives:
0b10001100100011000000001

或直接在代码中完成:

print( bin( int("0b10001100000011000000001",2) | int("0b10001100100000000000001",2) ) )