Python「內建函數」系列,這篇來介紹 hex(),把整數轉成十六進位字串。
hex():把整數變十六進位字串
hex() 接收一個整數,回傳它的十六進位表示字串,前面會加上 '0x' 前綴。十六進位用 0~9 加上 a~f 共 16 個符號來表示數值。
語法:hex(x) # x 必須是整數基本用法:
# 整數 → 十六進位字串
print(hex(10)) # '0xa'
print(hex(16)) # '0x10'
print(hex(255)) # '0xff'
print(hex(256)) # '0x100'
print(hex(0)) # '0x0'十六進位中,a=10、b=11、c=12、d=13、e=14、f=15。所以 0xff 就是 15×16 + 15 = 255。
hex() 處理負數
負整數轉十六進位時,Python 會在前面加上負號:
print(hex(-1)) # '-0x1'
print(hex(-16)) # '-0x10'
print(hex(-255)) # '-0xff'去掉 '0x' 前綴與大小寫控制
hex() 預設回傳小寫字母,有時需要大寫或去掉前綴:
num = 255
# 去前綴(小寫)
print(hex(num)[2:]) # 'ff'
# 大寫
print(hex(num)[2:].upper()) # 'FF'
# 用 format() 更靈活
print(format(num, 'x')) # 'ff'(小寫)
print(format(num, 'X')) # 'FF'(大寫)
print(format(num, '#x')) # '0xff'(帶前綴)
print(format(num, '#X')) # '0XFF'(帶前綴大寫)
# f-string
print(f'{num:02x}') # 'ff'(至少2位,補零)
print(f'{num:04x}') # '00ff'(至少4位,補零)hex() 搭配 int() 反向轉換
hex() 把整數變十六進位字串,int() 可以把十六進位字串變回整數:
# 整數 → 十六進位字串
h = hex(255) # '0xff'
print(h)
# 十六進位字串 → 整數
n = int('0xff', 16) # 255
print(n)
# 不帶前綴也行
n2 = int('ff', 16) # 255
print(n2)
# 大寫也能轉
n3 = int('0xFF', 16) # 255
print(n3)hex() 的常見應用:顏色碼
十六進位在網頁顏色碼中非常常見,#RRGGBB 每兩位代表紅、綠、藍的值(0~255):
def rgb_to_hex(r, g, b):
"""RGB 轉十六進位顏色碼"""
return f'#{r:02X}{g:02X}{b:02X}'
def hex_to_rgb(hex_color):
"""十六進位顏色碼轉 RGB"""
hex_color = hex_color.lstrip('#')
r = int(hex_color[0:2], 16)
g = int(hex_color[2:4], 16)
b = int(hex_color[4:6], 16)
return (r, g, b)
# RGB → 十六進位
print(rgb_to_hex(255, 0, 0)) # '#FF0000'(紅色)
print(rgb_to_hex(0, 128, 255)) # '#0080FF'(天藍色)
print(rgb_to_hex(255, 255, 255)) # '#FFFFFF'(白色)
# 十六進位 → RGB
print(hex_to_rgb('#FF8800')) # (255, 136, 0)
print(hex_to_rgb('#00FF00')) # (0, 255, 0)小小綜合例子
來做一個顏色工具箱,可以在 RGB 和十六進位之間互轉,還能混合顏色:
# 顏色工具箱
def color_toolbox():
"""顏色轉換與混合工具"""
print('=== 顏色工具箱 ===')
# 常見顏色表
colors = {
'紅色': (255, 0, 0),
'綠色': (0, 255, 0),
'藍色': (0, 0, 255),
'黃色': (255, 255, 0),
'青色': (0, 255, 255),
'紫色': (128, 0, 128),
'橘色': (255, 165, 0),
}
# 顯示所有顏色的十六進位
print('\n【顏色對照表】')
for name, (r, g, b) in colors.items():
hex_code = f'#{r:02X}{g:02X}{b:02X}'
print(f' {name}:RGB({r:>3}, {g:>3}, {b:>3}) → {hex_code}')
# 混合兩個顏色
print('\n【顏色混合】')
def mix_colors(c1, c2):
return tuple((a + b) // 2 for a, b in zip(c1, c2))
pairs = [('紅色', '藍色'), ('紅色', '黃色'), ('藍色', '綠色')]
for n1, n2 in pairs:
mixed = mix_colors(colors[n1], colors[n2])
r, g, b = mixed
hex_code = f'#{r:02X}{g:02X}{b:02X}'
print(f' {n1} + {n2} = RGB{mixed} → {hex_code}')
# 解析十六進位色碼
print('\n【色碼解析】')
test_codes = ['#FF6600', '#336699', '#ABCDEF']
for code in test_codes:
pure = code.lstrip('#')
r = int(pure[0:2], 16)
g = int(pure[2:4], 16)
b = int(pure[4:6], 16)
brightness = (r + g + b) / 3
tone = '亮色' if brightness > 128 else '暗色'
print(f' {code} → RGB({r}, {g}, {b}) [{tone}]')
color_toolbox()hex() 的重點整理:只接受整數、回傳帶 '0x' 前綴的小寫字串、用 format() 可控制大小寫和補零、int(x, 16) 可以反轉、十六進位在顏色碼和記憶體位址中特別常見。下一篇來看 repr(),物件的字串表示!