python进制
❶ 怎样用python进行二进制,八进制,十进制转换
从二进制转换为十进制有几种方式
第一种是在二进制数前加上0b,显示时会自动转换为十进制,注意这并不是字符串
x = 0b1010print(x)
如果是字符串可以利用eval求值
x = eval('0b1010')
第二种是利用int函数,字符串可以以0b为前缀,也可以不使用
int('1010',base=2)int('0b1010',2)
函数会将输入base进制的字符串转换为十进制
❷ python八进制转换为十进制
a = input('请输入一个八进制数:')
sum = 0
for i in range(len(a)-1,-1,-1):
sum += int(a[0])*(8**i)
print('%d 的十进制为:%d' % (int(a), sum))
❸ python的进制转换问题
int类是将指定进制下的数字转换为十进制数字
你在python命令下输入help(int),会出现下面这段话
class int(object)
| int(x=0) -> int or long
| int(x, base=10) -> int or long
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is floating point, the conversion truncates towards zero.
| If x is outside the integer range, the function returns a long instead.
|
| If x is not a number or if base is given, then x must be a string or
| Unicode object representing an integer literal in the given base. The
| literal can be preceded by '+' or '-' and be surrounded by whitespace.
| The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to
| interpret the base from the string as an integer literal.
你碰到的问题在可以引用上面这段英文来解释
If x is not a number or if base is given, then x must be a string or
Unicode object representing an integer literal in the given base.
翻译过来是如果参数不是数字类型,或者base参数给出了,那么x必须是基于指定进制(默认是十进制)下的数字序列的字符串,所以下面举得例子有的成功有的报错:
int('123')#可以成功,执行,123十进制数字内
int('A123')#报错,因为A不在十进制数内
int('A123',16)#可以成功,因为A123,都是十六进制内的基本数字
int('010101',2)#可以成功,因为0和1都是二进制的基本数字。
楼上的也说了,组成二进制的数字是只有0和1的,你的输入中可是包含了非二进制的数字呢
❹ python怎样将16进制转化为2进制
#coding=gbk
var=input("请输入十六进制数:")
b=bin(int(var,16))
print(b[2:])
运行结果
详细请参考python自带int函数、bin函数用法
参考网址:https://docs.python.org/3/library/functions.html?highlight=int#bin
classint(x,base=10)
Return aninteger object constructed from a number or stringx, or return0if no arguments are given. Ifxis a number, returnx.__int__(). For floating point numbers, this truncates towards zero.
Ifxis not a number or ifbaseis given, thenxmust be a string,bytes, orbytearrayinstance representing aninteger literalin radixbase. Optionally, the literal can be preceded by+or-(with no space in between) and surrounded by whitespace. A base-n literal consists of the digits 0 to n-1, withatoz(orAtoZ) having values 10 to 35. The defaultbaseis 10. The allowed values are 0 and 2–36. Base-2, -8, and -16 literals can be optionally prefixed with0b/0B,0o/0O, or0x/0X, as withinteger literals in code. Base 0 means tointerpret exactly as a code literal, so that the actual base is 2, 8, 10, or 16, and so thatint('010',0)is not legal, whileint('010')is, as well asint('010',8).
Theinteger type is described inNumeric Types — int, float, complex.
Changed in version 3.4:Ifbaseis not an instance ofintand thebaseobject has abase.__index__method, that method is called to obtain aninteger for the base. Previous versions usedbase.__int__instead ofbase.__index__.
Changed in version 3.6:Grouping digits with underscores as in code literals is allowed.
2.bin(x)
Convert aninteger number to a binary string. The result is a valid Python expression. Ifxis not a Pythonintobject, it has to define an__index__()method that returns an integer.
❺ python怎么讲十六进制python进制转换
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 2/10/16 base trans. wrote by srcdog on 20th, April, 2009
# ld elements in base 2, 10, 16.
import os,sys
# global definition
# base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]
# bin2dec
# 二进制 to 十进制: int(str,n=10)
def bin2dec(string_num):
return str(int(string_num, 2))
# hex2dec
# 十六进制 to 十进制
def hex2dec(string_num):
return str(int(string_num.upper(), 16))
# dec2bin
# 十进制 to 二进制: bin()
def dec2bin(string_num):
num = int(string_num)
mid = []
while True:
if num == 0: break
num,rem = divmod(num, 2)
mid.append(base[rem])
return ''.join([str(x) for x in mid[::-1]])
# dec2hex
# 十进制 to 八进制: oct()
# 十进制 to 十六进制: hex()
def dec2hex(string_num):
num = int(string_num)
mid = []
while True:
if num == 0: break
num,rem = divmod(num, 16)
mid.append(base[rem])
return ''.join([str(x) for x in mid[::-1]])
# hex2tobin
# 十六进制 to 二进制: bin(int(str,16))
def hex2bin(string_num):
return dec2bin(hex2dec(string_num.upper()))
# bin2hex
# 二进制 to 十六进制: hex(int(str,2))
def bin2hex(string_num):
return dec2hex(bin2dec(string_num))
❻ python十进制转二进制3位数
设 num1 为123,通过 type( ) 可以看到类型为 int
使用 bin( ) 函数将 num1 转换为二进制,返回值存入 bin_num1
但 num1 本身没有改变,返回的 bin_num1 是二进制表示,但 bin_num1类型是 str
❼ python各种进制求值的方法
defcheckio(str_number,radix):
str_int=dict(map(lambdax,y:(y,x),[iforiinrange(10,36)],[chr(i)foriinrange(97,123)]))
int_int=dict(map(lambdax,y:(str(x),y),[iforiinrange(10)],[iforiinrange(10)]))
sum=0
times=0
foriinreversed(str_number):
v=int_int.get(i,None)
ifv==None:
v=str_int.get(i.lower(),None)
ifv>=radix:
return-1
else:
sum+=viftimes==0elsev*radix**times
times+=1
returnsum
#These"asserts"usingonlyforself--testing
if__name__=='__main__':
assertcheckio("AF",16)==175,"Hex"
assertcheckio("101",2)==5,"Bin"
assertcheckio("101",5)==26,"5base"
assertcheckio("Z",36)==35,"Zbase"
assertcheckio("AB",10)==-1,"B>A=10"
print("Codingcomplete?Click'Check'!")
❽ Python中的不同进制的语法和转换
不同进制的书写方式
八进制(Octal) 0o377
十六进制(Hex) 0xFF
二进制(Binary) 0b11111111
不同进制之间的转换
Python提供了三个内置的函数,可以用来在不同进制间做转换。
>>> oct(255), hex(255), bin(255)
('0o377', '0xff', '0b11111111')
还可以使用int函数,把字符串转成数值
>>> int('255'), int('0xFF', 16)
(255, 255)
除此之外还可以使用eval,功能类似于int函数,但是它的参数是python代码。
>>> eval('255'), eval('0xFF')
(255, 255)
当然也可使用字符串的格式化输出
>>> '{0:0}, {1:x}, {2:b}'.format(255, 255, 255)
'255, ff, 11111111'
>>> '%o, %x, %X' % (255, 255, 255)
'377, ff, FF'
❾ 关于python如何实现各进制转换的总结大全
ctf经常遇到进制转换的问题,就正好做一个进制转换总结,分享出来供大家参考学习,下面来一起看看详细的介绍:
字符串与十六进制转换
例如网络ctf 12月的第二场第一个misc
?
1
626536377D
比较简单的一种做法就是直接调用字符串的.decode('hex')解密即可, 但如果不用这个函数你会怎么解呢?
一种思路就是先2个分组,解出每组的ascii值,合并下字符串即可得到,具体代码如下
?
1234567
import res='626536377D's = re.findall(r'.{2}',s)s = map(lambda x:chr(int(x,16)),s)print ''.join(s)>>>flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
前面说了字符串的decode('hex')函数,另外还有两个转16进制的函数,这里都总结一下
内置函数hex()
只能转换10进制整数为十六进制,不能转字符串
binascii库的hexlify()和b2a_hex()
这两个函数的功能是将字符串转换成十六进制,对应的解密函数分别为 unhexlify()和a2b_hex()
进制互转
二进制,八进制,十六进制转10进制比较简单,直接调用
int函数
?
1
int(str,base) //返回十进制整数,但注意此时第一个参数为字符串
对应的解密函数分别是
?
12345
bin() //10进制转二进制 oct() //十进制转八进制 hex() //十进制转十六进制
但二进制直接转16进制就需要多走一步了,先用int转十进制,在用上面提到的hex()函数将十进制转换成十六进制,比较精简的写法是
?
1
map(lambda x:hex(int(x,2)),['0011']) //lambda表达式
或者是
?
1
[hex(int(x,2)) for x in ['0011']] //列表解析
对应的解密函数就是
?
1
map(lambda x:bin(int(x,16)),['ef'])
最后在附上自己用python写的一个进制转换小工具,主要功能是对一组二进制,或者ascii,或十六进制转换成字符串,想必ctf上也经常会遇到这类题型吧
?
041424344
# make by 江sir#coding:utf-8import reimport argparse def bintostr(text): text = text.replace(' ','') text = re.findall(r'.{8}',text) s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制 flag = ''.join(s) return flag def asciitostr(text): if ' ' in text: text = text.split(' ') elif ',' in text: text = text.split(',') s = map(lambda x:chr(int(x)),text) flag = ''.join(s) return flag def hextostr(text): text = re.findall(r'.{2}',text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ''.join(s) return flag if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-b") parser.add_argument("-a") parser.add_argument("-x") argv = parser.parse_args() #print argv if argv.b: res = bintostr(argv.b) elif argv.a: res = asciitostr(argv.a) elif argv.x: res = hextostr(argv.x) print res
用法:
十六进制转字符串:
626536377D
?
12
bintostr.py -x "626536377D"flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
二进制转字符串:
可以有空格,也可以无空格
00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100
?
12
bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"/.txt
ascii转字符串
可以是空格分隔,也可以是,分隔
s='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32'
?
12
bintostr.py -a "45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32"-.-. - ..-. .-.. ... -... ..--.- -... ... .-..
以上实例均来自某些ctf赛题
总结
❿ python怎么输入16进制数
a='0x0012e' b= hex(eval(a)) print b 输出 0x12e 注意,一般计算机的十六进制数直接输出的时候是不补0的,所以 0x12e 就是 0x0012e,就好像 0005和5在整型数是存储成一样的值。