Python 有符号整数到2';s补十六进制

Python 有符号整数到2';s补十六进制,python,hex,twos-complement,Python,Hex,Twos Complement,我已经用Python编写了一个函数来获取一个有符号整数,使用2的补码将其转换,然后返回十六进制值。我知道有一个hex()函数,但我希望能够指定整数的大小。我怎样才能提高这段代码的质量,我是否遗漏了什么?谢谢 #!/usr/bin/python int8, int16, int32, int64 = 8, 16, 32, 64 def intToHexString(value, bits): def getBitmask(bits): mask = 0 for i in r

我已经用Python编写了一个函数来获取一个有符号整数,使用2的补码将其转换,然后返回十六进制值。我知道有一个
hex()
函数,但我希望能够指定整数的大小。我怎样才能提高这段代码的质量,我是否遗漏了什么?谢谢

#!/usr/bin/python

int8, int16, int32, int64 = 8, 16, 32, 64

def intToHexString(value, bits):
  def getBitmask(bits):
    mask = 0
    for i in range(bits):
      mask = (mask << 1) + 1
    return mask

  if not isinstance(value, (int, long)):
    raise ValueError("'%s' is not an Integer!"%str(value))
  if not isinstance(bits, int) or bits % 2 != 0:
    raise ValueError("Illegal integer size," +
      "value %s must be divisible by 2!"%str(bits))
  result = value
  bitmask = getBitmask(bits)
  halfMask = bitmask >> 1
  minVal, maxVal = -halfMask, halfMask-1
  if not minVal <= result <= maxVal:
    raise ValueError('Out of range: %d <= %d <= %d'
      %(minVal, result, maxVal))
  if value < 0:
    result = ((abs(value) ^ bitmask) + 1) & bitmask
  return '%0*X'%(int(float(bits)/4), result)

if __name__ == '__main__':
  x, y = 280, -54
  print intToHexString(x, int16), intToHexString(y, int8)
#/usr/bin/python
int8,int16,int32,int64=8,16,32,64
def INTTOHEXTSTRING(值,位):
def getBitmask(位):
掩码=0
对于范围内的i(位):
掩码=(掩码>1
最小值,最大值=-半掩模,半掩模-1

如果不是minVal我会这样写:

def int_to_hex_string(value, bits):
    return "{0:0{1}X}".format(value & ((1<<bits) - 1), bits//4)

if __name__ == '__main__':
  x, y = 280, -54
  print(int_to_hex_string(x, 16), int_to_hex_string(y, 8))
def int_to_hex_字符串(值,位):

返回“{0:0{1}X}”。format(value&((1我会这样写:

def int_to_hex_string(value, bits):
    return "{0:0{1}X}".format(value & ((1<<bits) - 1), bits//4)

if __name__ == '__main__':
  x, y = 280, -54
  print(int_to_hex_string(x, 16), int_to_hex_string(y, 8))
def int_to_hex_字符串(值,位):

返回“{0:0{1}X}”((1几乎完美,但您希望格式中有
X
not
X
,因此OP在输出中得到
CA
not
CA
。对OP的评论:即使您希望错误带有更好的消息,这样它就不会说
不支持的类型了。最后一件事是:OP使用的是Python 2.X,所以您的
打印
我正在打印元组。我假设他可以添加一个
,如果他需要的话,可以从
导入。我喜欢你使用的Python3结构。是的,我可以使用
\uu未来
。我使用的是Python2.7.3。几乎完美,但你需要格式为
X
X
,因此OP在ou中得到
CA
而不是
CA
tput.对OP的评论:即使你想要一个带有更好消息的错误,这样它就不会说关于
不支持的类型的最后一件事:OP使用的是Python 2.x,所以你的
print
将打印一个元组。我假设他可以添加一个
from\uuuuuu future\uuuuu
导入,如果他需要的话。我喜欢你给我们的Python3结构ed.是的,我可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
。我正在使用Python 2.7.3。