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

时间:2015-10-12 19:16:24

标签: python polygon matplotlib-basemap

所以,我正在使用 the answer to this question为某些多边形绘制颜色以绘制到底图实例。我将该链接中的功能修改为以下内容。我遇到的问题是我必须将它返回的字符串转换为十六进制数字,以便我可以为多边形着色。但是当我将类似“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

2 个答案:

答案 0 :(得分:1)

使用字符串格式,例如:

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

答案 1 :(得分:1)

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

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

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

新代码应使用上述代码而不是%运算符。如果您对“为什么Python有格式函数以及格式方法?”感到好奇,请参阅my answer to this question

但是,如果您使用的函数/方法采用整数和字符串,通常您不必担心值的表示,因为在这种情况下字符串{{1} }与整数值'0x0000AA'0xAA相同。