Python中十六进制值的表示方法

3

除去关键术语不说,0xFF20 的数值为 -224。从 int( 'FF20', 16 ) 中可得到 65312

考虑到这种高级语言的特性,Python 中如何获取十六进制字符串的“word”数值呢?


2
你是想要有符号的值,对吗? - Patashu
缺乏更好的术语,是的! - abestic9
1
@AndrewBestic,这是“最佳术语”(http://en.wikipedia.org/wiki/Signed_number_representations)! - Simon MᶜKenzie
2个回答

4

如果您需要签名值,可以像Pantashu提到的那样使用ctypes

ctypes.c_short(int('FF20', 16)).value

@Patashu,抱歉我的错!这就是我没有简单地复制你的名字的后果 :) - Sajjan Singh
如果您预先知道十六进制字符串的长度(因此可以使用正确的 ctype),那么您的答案就很好。否则会变得混乱不堪。 - Patashu
@Patashu 是的,非常正确。我猜他在使用术语“word”时并不是在技术上,但我自动将其与16位数据类型相关联。因此,除非十六进制值位于已知范围内,否则您的数学方法肯定更好。 - Sajjan Singh
现在只需要计算两个十六进制字节。谢谢! - abestic9
你很幸运我没有在任意处理架构上使用Python;-) - abestic9
显示剩余2条评论

3
如果第一个字符的高位被设置为(8-F),那么在解析后的值中减去值为0x1000...(0的数量等于单词中十六进制字符的数量)的值。
例如,FF20的高位被设置了,将其转换为十进制并从中减去0x10000(65536-65312 = -224)。
您可以通过计算单词中十六进制字符数的4倍次幂,来计算值为0x100...的值。例如,2^(4*4) = 65536。

我使用了 if ( HexValue[0:1] > 7 ):,它运行得非常好,谢谢。 - abestic9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接