提问人:Crashzen 提问时间:10/26/2023 最后编辑:Crashzen 更新时间:10/26/2023 访问量:79
如何在Python中输出十六进制值而不是字符串或int?
How to output a hex value but not as a string or int in Python?
问:
我有一个函数(不是我自己的函数),它需要一个格式为 0x****** 的十六进制值作为颜色值。我拥有的函数接受 RGB 值并将它们转换为十六进制,但将其输出为字符串。有没有办法将该字符串评估为十六进制值?
我尝试将十六进制值更改为整数,但该函数似乎不接受整数。
这是我拥有的函数,它接受 RGB 值并将其转换为十六进制。
def decToHexa(n):
# char array to store hexadecimal number
hexaDeciNum = ['0'] * 100
# Counter for hexadecimal number array
i = 0
while (n != 0):
# Temporary variable to store remainder
temp = 0
# Storing remainder in temp variable.
temp = n % 16
# Check if temp < 10
if (temp < 10):
hexaDeciNum[i] = chr(temp + 48)
i = i + 1
else:
hexaDeciNum[i] = chr(temp + 55)
i = i + 1
n = int(n / 16)
hexCode = ""
if (i == 2):
hexCode = hexCode + hexaDeciNum[0]
hexCode = hexCode + hexaDeciNum[1]
elif (i == 1):
hexCode = "0"
hexCode = hexCode + hexaDeciNum[0]
elif (i == 0):
hexCode = "00"
# Return the equivalent
# hexadecimal color code
return hexCode
# Function to convert the
# RGB code to Hex color code
def convertRGBtoHex(R, G, B):
if ((R >= 0 and R <= 255) and
(G >= 0 and G <= 255) and
(B >= 0 and B <= 255)):
hexCode = "0x";
hexCode = hexCode + decToHexa(R)
hexCode = hexCode + decToHexa(G)
hexCode = hexCode + decToHexa(B)
return hexCode
# The hex color code doesn't exist
else:
return "-1"
这是使用该值的位置:
def appendCharacter(self,ch,x,y,r,g,b):
idx = self.numChars
M = self.metrics[ch]
self.textData[idx].screenXY = (x << 16) | y
self.textData[idx].atlasXY = (M["x"]<<16) | M["y"]
self.textData[idx].ascentDescentWidthLeftBearing = (
(M["ascent"]<<24) |
(M["descent"]<<16) |
(M["width"]<<8) |
(M["leftbearing"]+128) #make positive
)
self.textData[idx].color = int(convertRGBtoHex(r, g, b).lower(), 0)
self.numChars+=1
我希望我能提供比这更多的信息,但我拥有的大部分代码都是由我的教授提供的,所以我对它们如何协同工作知之甚少。
答:
如果函数特别要求格式为 0x****** 的十六进制值,并且不接受整数,则可以将该值保留为整数,但将其格式化为带有“0x”前缀的十六进制字符串。以下是执行此操作的方法:
# Convert your RGB values to an integer (e.g., 0x33FF99)
rgb_int = (red << 16) | (green << 8) | blue
# Format it as a hex string with the "0x" prefix
formatted_hex = f"0x{rgb_int:06X}"
红色、绿色和蓝色代表您的 RGB 值(每个值在 0-255 范围内)。
rgb_int是通过将这些值移位并组合成格式为 0xRRGGBB 的单个整数来构造的。
f“0x{rgb_int:06X}” 将 rgb_int 格式设置为带有“0x”前缀且至少 6 个字符的字符串,因此它遵循 0x****** 格式。
尝试在函数中使用 rgb_int 作为参数。
评论
rgb_int
您可以尝试使用 python 中的 int() 方法将字符串转换为十六进制。 像这样的东西:
hex_value = int("the returned hex string", 16)
第二个参数是结果(十六进制)的基数 这将为您提供十六进制的值
评论
你可以用这个替换你的整个功能decToHexa
#08x = (0) pad (8) positions he(x)adecimal
hxd = f'0x{n:08x}'
转换回 int
#convert to int using base 16
i = int(hxd, 16)
需要注意的一点:您似乎认为它必须采用十六进制格式才能使用位移。您可以对任何 int.十六进制格式只是一种轻松表示数字概念的方法。这是您位移的实际数字,而不是概念表示。换句话说,您根本不需要将其转换为十六进制,除非您正在使用的东西需要该格式(即通常是 RGBA 值)。
评论
func(0x12345)
0x