Bugku-进制转换

题目:二进制、八进制、十进制、十六进制,你能分的清吗?

既然是四种进制,于是得到了首字母对应的进制:

d : 10进制
x : 16进制
o : 8进制
b : 2进制

解题思路:

1.进行转换时,用到了python的int()函数:

int():将一个数字或base类型的字符串转换成整数。

进制转换使用格式: int(字符串,base=进制)
(可以省略base,直接使用int(字符串, 进制))

2.不能根据字符串中是否有‘d’、‘o’等来判断这个字符串属于什么进制,因为有的字符串中含有两种字母,如’x6d’,因此使用python的startswith()函数,根据首字符来判断该字符串属于什么进制

3.进行转换之前,要将字符串替换掉‘o’、‘d’、‘x’、‘b’,并且只需替换掉开头的字符,使用

i.replace('o','',1) # 替换次数不超过1
...

脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
flag = ''

with open('C:/Users/腾飞/Desktop/text.txt','r') as f:
content = f.readlines()
content = content[0]
lists = content.split(' ')
for i in lists:
if i.startswith('d'):
i = i.replace('d', '', 1)
i = chr(int(i,base=10))
flag += i
elif i.startswith('x'):
i = i.replace('x', '', 1)
i = chr(int(i,base=16))
flag += i
elif i.startswith('o'):
i = i.replace('o', '', 1)
i = chr(int(i,base=8))
flag += i
elif i.startswith('b'):
i = i.replace('b', '', 1)
i = chr(int(i,base=2))
flag += i

print(flag)