1. 程式人生 > 程式設計 >Python3內建函式chr和ord實現進位制轉換

Python3內建函式chr和ord實現進位制轉換

python的內建函式中,有一對函式:chr 和 ord,有著相反的功能。

1. chr(x):用一個數值作引數,返回一個對應的unicode字元,該引數的有效範圍是從0到1114111(16進位制時為0x10FFFF),引數可以是十進位制,也可以是十六進位制。

print(chr(105)) # ---> i
print(chr(0x9980)) # ---> 漢字:餘
print(chr(0x0030)) # ---> 0
print(chr(8364))  # ---> ?

print(chr(127137)) # ---> 撲克:A
print(chr(44032)) # ---> 韓語:가
print(chr(126976)) # --->麻將:東

Python3內建函式chr和ord實現進位制轉換

2. ord(x):chr(x)的反向函式,通過一個Unicode字元,返回其對應的數值。

print(ord('0')) # ---> 48(十進位制):其十六進位制為 0x0030
print(ord('i')) # ---> 105(十進位制)

3. 其中,進位制轉換,主要有以下幾種方式:

十六進位制、二進位制、八進位制轉十進位制,注意:二進位制表示中每一位只能是0或1表示,八進位制中每一位只能在0-7之間,同理十六進位制中的每一位在0-f之間,超出範圍會報錯。

print(int('10',2)) #二進位制轉十進位制,int('20',2) 會報錯
print(int('30',8)) #八進位制轉十進位制,int('80',8) 會報錯

print(int('f0',16)) #十六進位制轉十進位制,int('g0',16) 會報錯

# 下面的方式也可
print(int('0b10',2)) #二進位制轉十進位制
print(int('0o30',8)) #八進位制轉十進位制
print(int('0xf0',16)) #十六進位制轉十進位制

十進位制轉二進位制、八進位制、十六進位制,內建函式bin、oct、hex得到的進位制前面會分別帶有'0b','0o','0x'字元。

print(bin(15)) # 十進位制轉二進位制
print(oct(15)) # 十進位制轉八進位制
print(hex(482)) # 十進位制轉十六進位制

或者

print(format(482,"x")) # 十進位制轉十六進位制
print(format(15,"o")) # 十進位制轉八進位制
print(format(15,"b")) # 十進位制轉二進位制

4. format進位制轉換,b,o,d,x 分別表示 二進位制、八進位制、十進位制、十六進位制

十六進位制轉二進位制、八進位制、十進位制

# format進位制轉換
print('{:b}'.format(0xef)) #十六進位制轉二進位制:11101111
print('{:o}'.format(0xef)) #十六進位制轉八進位制:357
print('{:d}'.format(0xef)) #十六進位制轉十進位制:239

#格式化中加'#'表示加入標識
print('{:#b}'.format(0xef)) #十六進位制轉二進位制:0b11101111,加標識 0b
print('{:#o}'.format(0xef)) #十六進位制轉八進位制:0o357,加標識 0o
print('{:#d}'.format(0xef)) #十六進位制轉十進位制:239,十進位制不變

八進位制、十進位制轉二進位制

print('{:b}'.format(0o357)) #八進位制轉二進位制:11101111
print('{:b}'.format(239)) #十進位制轉二進位制:11101111
print('{:#b}'.format(0o357)) #八進位制轉二進位制:0b11101111,加標識 0b
print('{:#b}'.format(239)) #十進位制轉二進位制:0b11101111,加標識 0b

十進位制、八進位制、二進位制轉十六進位制

#
print('{:x}'.format(239))  #十進位制轉十六進位制:ef
print('{:x}'.format(0b11101111)) #二進位制轉十六進位制:ef
print('{:x}'.format(0o357)) #八進位制轉十六進位制:ef

#
print('{:#x}'.format(239))  #十進位制轉十六進位制:0xef,加標識 0x
print('{:#x}'.format(0b11101111)) #二進位制轉十六進位制:0xef,加標識 0x
print('{:#x}'.format(0o357)) #八進位制轉十六進位制:0xef,加標識 0x

八進位制以 '0o開頭',二進位制以 '0b' 開頭,十六進位制以 '0x' 開頭。

注:

正好了解一下unicode字符集,Unicode(統一碼、萬國碼、單一碼)是電腦科學領域裡的一項業界標準,包括字符集、編碼方案等,是可以容納世界上所有文字和符號的字元編碼方案,比ASCII碼能表示的範圍大得多。

其中包括的種類可以自行搜尋,每個種類在各自的區間範圍內,有趣的字元很多,參考知乎大佬的操作,可以發現:

  • 象形文字
  • 楔形文字
  • 八卦
  • 太極圖案
  • 易經64卦:範圍是[0x4DC0,0x4DFF],十進位制是[19904,19967],共64個
  • 撲克牌:範圍是[0x1f0a0,0x1f0df],十進位制是[127136,127199],共64個
  • 麻將:[126976,127009]是34張正常牌,例如東南西北中發白、筒子等,接下來8張[127010,127017]屬於春、夏、秋、冬,梅、蘭、竹、菊
  • 小圖示
  • 漢字:常用漢字[19968,40917],十六進位制是[0x4E00,0x9FD5];還有其他漢字在其他區域
  • 韓文:[44032,55203]
  • 阿拉伯文、希臘文、日文、朝鮮文、泰文、緬甸文、蒙古文、藏文、拉丁文......
  • 盲文
  • 數學運算子:[0x2200-0x22FF]
  • 箭頭
  • 貨幣
  • 標點等

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。