将十六进制字符串转换为 python 中的十六进制数字而不损失精度

Convert hex string to hex number in python without loss of precision

因此,我正在使用 the answer to this question 为一些多边形绘制到底图实例的值着色。我修改了 link 中的函数如下。我遇到的问题是我必须将它 returns 的字符串转换为要使用的十六进制数字,以便我可以为多边形着色。但是,当我将“0x00ffaa”之类的内容转换为 python 十六进制数字时,它会将其更改为“0xffaa”,不能用于为多边形

着色

我该如何解决这个问题?

修改后的函数如下:

def rgb(mini,maxi,value):
    mini, maxi, value = float(mini), float(maxi), float(value)
    ratio = 2* (value - mini) / (maxi-mini)
    b = int(max(0,255*(1-ratio)))
    r = int(max(0,255*(ratio -1)))
    g = 255 - b - r
    b = hex(b)
    r = hex(r)
    g = hex(g)
    if len(b) == 3:
        b = b[0:2] + '0' + b[-1]
    if len(r) == 3:
        r = r[0:2] + '0' + r[-1]
    if len(g) == 3:
        g = g[0:2] + '0' + g[-1]
    string = r+g[2:]+b[2:]
    return string

使用字符串格式,例如:

>>> "0x%08x" % 0xffaa
'0x0000ffaa'

cdarke 的答案是可以的,但是不推荐使用 % 运算符进行字符串插值。为了完成,这里是format函数或str.format方法:

>>> format(254, '06X')
'0000FE'

>>> "#{:06X}".format(255)
'#0000FF'

新代码预计会使用上述其中一项,而不是 % 运算符。如果您对 "why does Python have a format function as well as a format method?" 感到好奇,请参阅 my answer to this question

但如果您使用的 function/method 接受整数和字符串 ,通常您不必担心值 的表示,因为在这个如果字符串 '0x0000AA' 与整数值 0xAA170 相同。