python中如何将十进制转换为1的补码十六进制
How to convert decimal to 1's complement hexadecimal in python
我需要弄清楚,在 python 中,如何使用负值的 1 补码将带符号的十进制转换为十六进制。我需要获得的示例结果如下:
0 becomes 0000,
65.5 becomes 0041
200 becomes 00c8
-200 becomes ff37
我可以使用 hex() 轻松获得正数,但是如何进行转换才能获得负数的正确值?
你的例子是错误的。使用 6.55
你实际上是指 65
导致 0x41
。 20
变为 0x14
,而不是 0xc8
,因为那将是 200
。
0x20
的补码是 0xeb
而不是 0x37
或 0xff37
.
要计算补码,您可以使用 XOR-operator。使用 0xFF
或 0xFFFF
,具体取决于您预期数据的位深度。
16 位:
hex(0x14 ^ 0xFFFF) -> 0xffeb
0b0000000000010100 ^
0b1111111111111111
------------------
0b1111111111101011 -> 0xffeb
8 位:
hex(0x14 ^ 0xFF) -> 0xeb
我需要弄清楚,在 python 中,如何使用负值的 1 补码将带符号的十进制转换为十六进制。我需要获得的示例结果如下:
0 becomes 0000,
65.5 becomes 0041
200 becomes 00c8
-200 becomes ff37
我可以使用 hex() 轻松获得正数,但是如何进行转换才能获得负数的正确值?
你的例子是错误的。使用 6.55
你实际上是指 65
导致 0x41
。 20
变为 0x14
,而不是 0xc8
,因为那将是 200
。
0x20
的补码是 0xeb
而不是 0x37
或 0xff37
.
要计算补码,您可以使用 XOR-operator。使用 0xFF
或 0xFFFF
,具体取决于您预期数据的位深度。
16 位:
hex(0x14 ^ 0xFFFF) -> 0xffeb
0b0000000000010100 ^
0b1111111111111111
------------------
0b1111111111101011 -> 0xffeb
8 位:
hex(0x14 ^ 0xFF) -> 0xeb