将十六进制字符串转换为 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'
与整数值 0xAA
或 170
相同。
因此,我正在使用 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'
与整数值 0xAA
或 170
相同。