【问题标题】:Return non- string number from the output of hex to binary conversion?从十六进制输出返回非字符串数字到二进制转换?
【发布时间】:2017-08-25 02:25:13
【问题描述】:

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

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

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

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

0b10001100000000000000001 | 0b10001100100000000000001

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

【问题讨论】:

标签: python binary bit-manipulation


【解决方案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" 是一个字符串而不是一个数字。

无论如何,在你理解以上内容之前,你可以玩弄以下代码sn-ps:

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) ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2010-11-17
    • 2013-11-24
    • 2017-03-22
    • 2023-03-04
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多