引言
昨天的題目學習到進位制以及「 ASCII code <-> 字元」轉換,
關於 Python 中的進位制前綴,可以簡單列出下表:
進位制 | 前綴 |
---|
二進制 | 0b (零+b)
八進制 | 0o (零+小寫英文字母o)
十進制 | 無
十六進制 | 0x (零+小寫英文字母x)
例:
一個八進位數字 4562
表示成: 0o4562
一個十六進位數字 ff75
表示成: 0xff75
順帶一提這個包含字母的前綴+數字在 Python 中視為數字喔,
如果你試著
print(0x34)
程式會印出 52
,可見 Python 事實上會將其轉成十進位數。
Python 中處理 ASCII code 與字元轉換的方式剛好就兩個函數:
General Skills / Warmed Up
這題馬上就用到進位制了,題目要求16進位轉10進位,
所以寫一個 python 檔,用 int() 來轉換:
# base.py
print(int('0x3d', base=16))
int() 轉換出來的必定是十進位整數。
這裡寫法很多種,
因後面已指定 base 是16進位, 0x
就沒有必要:
print(int('3d', base=16))
還有這種,
base=0 表示自動判斷,因為前面有 0x
就能得知是16進位:
print(int('0x3d', base=0))
int() 可填入數字或字串,取決於用途,
- 如果是用來小數轉整數,填入數字,如:
int(3.14)
;- 如果是用來進制轉換 (必轉成10進位) ,有指定 base 的話 (包含 base=0) ,
則需填字串,如:int('0b101', base=2)
,
但如果不填入 base 則需填數字,如:int(0b101)
。
執行:
$ python base.py
61
將 61 用 flag 格式包住:
picoCTF{61}