如何在Python中将负整数值转换为十六进制 [英] how to convert negative integer value to hex in python

查看:1268
本文介绍了如何在Python中将负整数值转换为十六进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用python 2.6

 >>>十六进制(-199703103)
'-0xbe73a3f'

>>>十六进制(199703103)
'0xbe73a3f'

正值和负值是相同的吗? p>

当我使用calc时,值是 FFFFFFFFF418C5C1

解决方案

Python的整数可以随意增大。为了以您希望的方式计算原始补充,您需要指定所需的位宽。您的示例在64位二进制补码中显示 -199703103 ,但它也可能是32位或128位,导致不同数量的<$ c
$ b

hex() doesn'这样做。我建议以下方法作为替代:

$ pre $ def $ to $ (1
print tohex(-199703103,64)
print tohex(199703103,64)

打印出来:

  0xfffffffff418c5c1L 
0xbe73a3fL


I use python 2.6

>>> hex(-199703103)
'-0xbe73a3f'

>>> hex(199703103)
'0xbe73a3f'

Positive and negative value are the same?

When I use calc, the value is FFFFFFFFF418C5C1.

解决方案

Python's integers can grow arbitrarily large. In order to compute the raw two's-complement the way you want it, you would need to specify the desired bit width. Your example shows -199703103 in 64-bit two's complement, but it just as well could have been 32-bit or 128-bit, resulting in a different number of 0xf's at the start.

hex() doesn't do that. I suggest the following as an alternative:

def tohex(val, nbits):
  return hex((val + (1 << nbits)) % (1 << nbits))

print tohex(-199703103, 64)
print tohex(199703103, 64)

This prints out:

0xfffffffff418c5c1L
0xbe73a3fL

这篇关于如何在Python中将负整数值转换为十六进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆