python编写程序转换进制_python——进制转换

今天做一道题需要写一个二进制转换成十六进制的脚本,由于初学python不甚了解,于是百度尝试着写,现总结如下:

首先python中没有二进制直接转换成十六进制的函数,需要先将二进制转换成十进制然后再转换成十六进制。于是先来看二进制转换成十进制:

python中的int()除了能把其他类型的数据转换成数字类型,还有一个用法:

int(string,base):其中string代表一个字符串(实际上是一个数字字符串),base是一个数,代表string代表的这个数是几进制【注意:不是要转换成几进制,而是数本身是几进制】;整个函数的功能就是讲string代表的数字转换成十进制。因此,有了这个函数,二进制转换成十进制就很简单,代码如下:

# 二进制 to 十进制

def bin_to_dec(string_num):

return str(int(string_num, 2)) # int(string_num,2)的意思是string_num是一个二进制数字,将其用十进制表示出来。

同理,可以写出其他进制转换成十进制的形式:

# 十六进制 to 十进制

def hex_to_dec(string_num):

return str(int(string_num, 16))

# 八进制 to 十进制

def oct_to_dec(string_num):

return str(int(string_num,8))然后:第二步写十进制转换成十六进制:

我自己写的代码如下:

# 十进制 to 十六进制

def dec_to_hex(string_num):

d=int(string_num)

h1=''

h2=''

m = d

while(m != 0):

r = m % 16

m = m // 16

if r == 10:

h1 = h1 + 'A'

elif r == 11:

h1 = h1 + 'B'

elif r == 12:

h1 = h1 + 'C'

elif r == 13:

h1 = h1 + 'D'

elif r == 14:

h1 = h1 + 'E'

elif r == 15:

h1 = h1 + 'F'

else:

h1 = h1 + str(r)

h2 = h1[::-1] #这要注意:将字符串反转过来才是十六进制数

return h2

我的代码很简单就不解释了,要注意的一点就是求得h1后,反转后才得到十六进制字符串。

这里要注意字符串反转的技巧:

str1=“abcdef”

str2=str1[::-1]

这样str2就是fedcba

从网上找的代码:

base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]

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]])一下感觉高大上了,来解释下:

首先定义了一个字符串base='0123456789ABCDEF',原来for循环还可以这样用。

然后定义了一个空的列表。然后来看一下divmod(num1,num2)这个函数:返回一个tuple,(div,mod)【(商,余数)】,求出余数之后追加到mid后面。

最后反转字符串,返回。

此处要讲一讲join函数:

join(list)中的参数是一个列表,使用方法:

>>> a=['hello','world']

>>> '?'.join(a) //这里是用问号连接

'hello?world'

>>> ','.join(a) //这里用逗号连接

'hello,world'

>>> ';'.join(a) //这里用分号连接

'hello;world'

到此二进制转换成十六进制就写完了,附上全部的代码:

# -*- coding: utf-8 -*-

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)]

# 二进制 to 十进制

def bin_to_dec(string_num):

return str(int(string_num, 2)) # int(string_num,2)的意思是string_num是一个二进制数字,将其用十进制表示出来。

# 十六进制 to 十进制

def hex_to_dec(string_num):

return str(int(string_num, 16))

# 八进制 to 十进制

def oct_to_dec(string_num):

return str(int(string_num,8))

# 十进制 to 十六进制(法一)

def dec_to_hex(string_num):

d=int(string_num)

h1=''

h2=''

m = d

while(m != 0):

r = m % 16

m = m // 16

if r == 10:

h1 = h1 + 'A'

elif r == 11:

h1 = h1 + 'B'

elif r == 12:

h1 = h1 + 'C'

elif r == 13:

h1 = h1 + 'D'

elif r == 14:

h1 = h1 + 'E'

elif r == 15:

h1 = h1 + 'F'

else:

h1 = h1 + str(r)

h2 = h1[::-1]

return h2

# 十进制 to 十六进制(法二)

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]])

if __name__=='__main__':

s1 = bin_to_dec("110011011010")

s2 = dec2hex(s1)

s3 = dec_to_hex(s1)

print(s2+'\n')

print(s3)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值