当前位置:首页 » 编程语言 » python进制转换

python进制转换

发布时间: 2022-01-14 16:43:42

Ⅰ 用python的循环语句来表示十进制转换为二进制

deftonnum(x,n=2):#转换进制,默认是2进制
t=[]
mystr="0123456789ABCDEFGHIJK"
whilex>0:
t.append(mystr[x%n])
x//=n
t=list(reversed(t))
return''.join(t)

defmain():
x=1023
print(tonnum(x))

main()

Ⅱ python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码

计算机文件大小单位

b = bit 位(比特)

B = Byte 字节

1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

1EB = 1024PB

进制分类

二进制:由2个数字组成,有0 和 1 python中标志:0b

八进制:由8个数字组成,有0,1,2,3,4,5,6,7 python中标志:0o

十进制:有10个数字组成,有0,1,2,3,4,5,6,7,8,9 python中标志:无

十六进制:有16个数字组成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(进制字母大小写都可以,分别代表10,11,12,13,14,15) python中标志:0x

python中的进制转换:

其他进制转换为十进制:int(相应进制)

其他进制转换为二进制:bin(相应进制)

其他进制转换为八进制:oct(相应进制)

其他进制转换为十六进制:hex(相应进制)

二进制 转化成 十进制:

例: 0b10100101

运算:1* 2^0 + 0* 2^1 + 1* 2^2 + 0* 2^3 + 0* 2^4 + 1* 2^5 + 0* 2^6 + 1* 2^7=

1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165

八进制 转化成 十进制:

例: 0o127

运算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87

十六进制 转化成 十进制:

例: 0xff

运算:15*16^0 + 15*16^1 = 255

十进制 转化成 二进制:

426 => 0b110101010

运算过程: 用426除以2,得出的结果再去不停地除以2,

直到除完最后的结果小于2停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可

十进制 转化成 八进制:

426 => 0o652

运算过程: 用426除以8,得出的结果再去不停地除以8,

直到除完最后的结果小于8停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可

十进制 转化成 十六进制:

运算过程: 用426除以16,得出的结果再去不停地除以16,

直到除完最后的结果小于16停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可。

相关推荐:《Python视频教程》

原码,反码,补码

实际人们看到的数字是原码转化之后显示出来的。

而原码是通过补码得到的。

计算机的所有数据在底层都是以二进制的补码形式存储

***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***

反码:二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换。

补码:用来做数据的存储运算,可以实现计算机底层的减法操作,因而提出(可以表达出一个数的正负)。

也就是说默认计算机只会做加法,例:5+(-3) => 5 - 3。

乘法除法是通过左移和右移 << >> 来实现。

正数高位补0,负数高位补1。

正数:

原码 = 反码 = 补码

负数:

反码 = 原码取反(除高位)

补码 = 反码加1

反码 = 补码减1

原码 = 反码取反(除高位)

我们会发现,在取反前减1和在取反后加1的效果是一样的,这就和-2-1 = -(2+1)一个道理,所以会得出这样的规律:

原码 = 补码取反加1

补码 = 原码取反加1

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 叫符号位正数为0, 负数为1。

比如

正数1在计算机中的存储即为

0 00000000000000000000001

负数1 在计算机中的存储即为

1 00000000000000000000001

一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。

正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反。

正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1。

所以原码,反码,补码正数情况下是一致的,负数情况下是不一致的。

计算机的运算过程实际就是补码相加的一个过程。

比如-2 + 3

-2 的原码为

1 000000000000000000000000010

反码为:

1 111111111111111111111111101

补码为:

1 111111111111111111111111110

3的原码为

0 000000000000000000000000011

反码为:

0 000000000000000000000000011

补码为:

0 000000000000000000000000011

那么二者补码相加结果为

1 111111111111111111111111110

+

0 000000000000000000000000011

=

10 000000000000000000000000001(计算机存储为32位,故前面溢出的1被舍弃,高位为0)

0 000000000000000000000000001

结果为1

再比如-2 + 1

-2 的原码为

1 000000000000000000000000010

反码为:

1 111111111111111111111111101

补码为:

1 111111111111111111111111110

1的原码为

0 000000000000000000000000001

1的反码为:

0 000000000000000000000000001

1的补码为:

0 000000000000000000000000001

二者的补码相加结果为

1 111111111111111111111111110

+

0 000000000000000000000000001

=

1 111111111111111111111111111

得出的补码转化为原码, 最低位减一得到反码,然后除符号位外所有位取反,得到结果

1 000000000000000000000000001

结果为1

Ⅲ 关于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进行二进制,八进制,十进制转换

从二进制转换为十进制有几种方式
第一种是在二进制数前加上0b,显示时会自动转换为十进制,注意这并不是字符串
x = 0b1010print(x)

如果是字符串可以利用eval求值

x = eval('0b1010')

第二种是利用int函数,字符串可以以0b为前缀,也可以不使用
int('1010',base=2)int('0b1010',2)

函数会将输入base进制的字符串转换为十进制

Ⅳ 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

  1. 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怎么把二进制转十进制

摘要 介绍2种十进制转二进制的方法:

Ⅷ python十进制转二进制3位数

设 num1 为123,通过 type( ) 可以看到类型为 int
使用 bin( ) 函数将 num1 转换为二进制,返回值存入 bin_num1
但 num1 本身没有改变,返回的 bin_num1 是二进制表示,但 bin_num1类型是 str

Ⅸ 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 8进制转十进制

#python 利用int()函数可以进行进制转换
int('0o235', 8) #将八进制数用引号引起来,后面输入进制,通过int()函数转换结果是157

热点内容
新预算法的亮点 发布:2024-12-22 16:36:30 浏览:959
linux命令行快捷键 发布:2024-12-22 16:33:27 浏览:10
淘宝网怎么上传宝贝 发布:2024-12-22 16:30:53 浏览:753
服务器gps是什么意思 发布:2024-12-22 16:10:43 浏览:996
iqoo安卓11变声器在哪里 发布:2024-12-22 15:46:45 浏览:252
ie锁定初始密码在哪里找 发布:2024-12-22 15:44:48 浏览:296
linuxtcp窗口 发布:2024-12-22 15:34:24 浏览:948
安卓官翻机和原装有什么区别 发布:2024-12-22 15:34:24 浏览:662
linux挂载的磁盘 发布:2024-12-22 15:34:23 浏览:234
密码不允许含有字符是什么意思 发布:2024-12-22 15:30:15 浏览:169