【发布时间】:2016-01-01 12:49:33
【问题描述】:
我需要弄清楚,在 python 中,如何使用 1 的补码将有符号十进制转换为十六进制。我需要得到的示例结果如下:
0 变成 0000,
65.5 变成 0041
200 变成 00c8
-200 变成 ff37
我可以使用 hex() 轻松获得正数,但是如何进行转换以获得负数的正确值?
【问题讨论】:
我需要弄清楚,在 python 中,如何使用 1 的补码将有符号十进制转换为十六进制。我需要得到的示例结果如下:
0 变成 0000,
65.5 变成 0041
200 变成 00c8
-200 变成 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
【讨论】: