如何使用python以二进制补码形式将有符号整数打印为十六进制数?

发布于 2024-09-10 07:18:50 字数 200 浏览 9 评论 0原文

我有一个负整数(4 个字节),我想要它的二进制补码表示形式的十六进制形式。

>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'

但我想看“FF……”

I have a negative integer (4 bytes) of which I would like to have the hexadecimal form of its two's complement representation.

>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'

But I would like to see "FF..."

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

情场扛把子 2024-09-17 07:18:50

这是一种方法(对于 16 位数字):(

>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'

不过可能不是最优雅的方法)

Here's a way (for 16 bit numbers):

>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'

(Might not be the most elegant way, though)

水水月牙 2024-09-17 07:18:50

使用 bitstring 模块:

>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'

Using the bitstring module:

>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'
死开点丶别碍眼 2024-09-17 07:18:50
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
绝不服输 2024-09-17 07:18:50

简单的

>>> hex((-4) & 0xFF)
'0xfc'

Simple

>>> hex((-4) & 0xFF)
'0xfc'
人间☆小暴躁 2024-09-17 07:18:50

要将整数视为二进制值,请使用所需位长度的掩码对其进行按位运算。

例如,对于 4 字节值(32 位),我们使用 0xffffffff 进行掩码:

>>> format(-1 & 0xffffffff, "08X")
'FFFFFFFF'
>>> format(1 & 0xffffffff, "08X")
'00000001'
>>> format(123 & 0xffffffff, "08X")
'0000007B'
>>> format(-312367 & 0xffffffff, "08X")
'FFFB3BD1'

To treat an integer as a binary value, you bitwise-and it with a mask of the desired bit-length.

For example, for a 4-byte value (32-bit) we mask with 0xffffffff:

>>> format(-1 & 0xffffffff, "08X")
'FFFFFFFF'
>>> format(1 & 0xffffffff, "08X")
'00000001'
>>> format(123 & 0xffffffff, "08X")
'0000007B'
>>> format(-312367 & 0xffffffff, "08X")
'FFFB3BD1'
把梦留给海 2024-09-17 07:18:50

struct 模块执行 Python 值和C 结构体表示为 Python 字节对象。打包字节对象提供对各个字节值的访问。
这可用于显示底层 (C) 整数表示。

>>> packed = struct.pack('>i',i) # big-endian integer
>>> type(packed)
<class 'bytes'>
>>> packed
b'\xff\xfb;\xd1'
>>> "%X%X%X%X" % tuple(packed)
'FFFB3BD1'
>>> 

The struct module performs conversions between Python values and C structs represented as Python bytes objects. The packed bytes object offers access to individual byte values.
This can be used to display the underlying (C) integer representation.

>>> packed = struct.pack('>i',i) # big-endian integer
>>> type(packed)
<class 'bytes'>
>>> packed
b'\xff\xfb;\xd1'
>>> "%X%X%X%X" % tuple(packed)
'FFFB3BD1'
>>> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文