鱼C论坛

 找回密码
 立即注册
查看: 12036|回复: 6

python3的二进制,十六进制,字符串,等之间的转换

[复制链接]
发表于 2016-1-16 22:56:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
麻烦各位指点一下phton3中如何进行 二进制,十六进制,字符串以及ascii之间的相互转换。谢谢!
我在度娘了很久,资料太乱,有些是python2里面的,python3好像有些问题不能解决。
比如:
1:字符串能不能直接转换为二进制、十六进制、以及其它进制
2:如果字符不能直接转换成二进制、十六进制、以及其它进制,那么需要怎么达成?
3:可不可以直接将字符转换成其它进制?
4:以下代码是字符/串转ascii码,我想问,如何将temp列表中的内容转换为字符串输出?
  1. #字符转ascii码
  2. pw = input(':')        #输入需转换为ascii码的字符串
  3. temp = []                #创建加密字符空列表
  4. for i in pw:        #字符转ascii码(因为不能直接将字符串直接转换为ascii码,所以只能一个一个转换)
  5.         x = ord(i)                #将pw中的每一个字符转换为ascii码
  6.         temp.append(x)                #将每一个字符添加到列表中
  7. print(temp)
复制代码


5:其它进制的转换格式是什么?

6:非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 23:26:27 | 显示全部楼层
1.无论何种进制,程序内部保存的都是一样的数据。转换成其他进制只是变成一个字符串,如十进制的10变为16进制成为''0xa',因此其他进制更多用于输出。
按你的程序转换为2进制:
  1. #字符转ascii码
  2. pw = input(':')        
  3. temp = []               
  4. for i in pw:        
  5.         x = bin(ord(i))
  6.         temp.append(x)               
  7. print(temp)
复制代码

转换为8进制改为oct,16进制hex

3.hex(ord('A'))
4.将print(temp)改为print('%s '*len(temp)%tuple(temp))
5.主要就是2,8,10,16进制。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-17 11:15:09 | 显示全部楼层
冬雪雪冬 发表于 2016-1-16 23:26
1.无论何种进制,程序内部保存的都是一样的数据。转换成其他进制只是变成一个字符串,如十进制的10变为16进 ...

非常感谢!
我还有一个问题:
1.是不是转换字符/串时,必须先将其转换为非字符类型,然后才能将其转换为其它进制?
比如:
将asdf转换为二进制
首先将asdf转换为ascii码

  1. a = input(':')
  2. temp = []
  3. for i in a:
  4.         x = ord(i)
  5.         xx = bin(x)
  6.         temp.append(xx)
  7. print(temp)
复制代码


当然这段代码书写比较繁琐,我只是想表明是否为这个执行过程?

2.上面的代码中,我使用的用for来转换每一个输入的字符为ascii码,然后在将其转换为二进制,最后将其逐个添加到temp列表中(这里的列表是每一个二进制的载体,为后面的输出做准备)。
这里我想问一个问题,有没有方法可以不使用列表为载体,而换成其它形式?
哎。。我废话太多,都不知道怎么问了。
简单的说,就是有没有其他方法可以不使用列表而实现上面的方法?并且将其所有转换后的内容以字符/串的形式打印/传递出来?
谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-17 20:46:07 | 显示全部楼层
seedcm 发表于 2016-1-17 11:15
非常感谢!
我还有一个问题:
1.是不是转换字符/串时,必须先将其转换为非字符类型,然后才能将其转换 ...

1.是的,必须用ord转换为ascii码。
2.ord只能接受单个字符,如果不想用列表作为载体,可以考虑计算成一个数字。
例如字符串'XYZ',ascii码分别是88,89,90,用16进制表示为58,59,5A。
算成一个数:88*255*255+89*255+90 = 5790042,用16进制显示为58595A。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-17 22:23:31 | 显示全部楼层
冬雪雪冬 发表于 2016-1-17 20:46
1.是的,必须用ord转换为ascii码。
2.ord只能接受单个字符,如果不想用列表作为载体,可以考虑计算成一 ...

嗯。。我明白了!谢谢!
但是还有一个问题:
你看,我写了一个将10进制自动添加到列表中了

  1. temp = []
  2. z = -1
  3. while z != 127:
  4.         z += 1
  5.         temp.append(z)
  6. print(temp)
复制代码

我就想问一下,十六进制或者二进制要如何自动循环并按顺序正确添加进列表?
其事,我就想问问怎么进位。。
你看,拿十六进制来说,00 01 02 03 -09(到这里还好,可以用数字叠)但是到了后面 0A,0B,0C,0D,0E,0F。这里有数字有字符,该怎么办?
还有一个问题,如何将00(零零)以数字的形式保存在列表中?或者二进制中的0000 0000.。
谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-17 22:35:30 | 显示全部楼层
还是要强调一点,无论什么进制的数,在计算机内部都是一样的,16进制等显示只能是字符串形式。
temp = []
for i in range(20):
   temp.append(hex(i))
00也只能以字符串的形式表达。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-17 23:21:56 | 显示全部楼层
冬雪雪冬 发表于 2016-1-17 22:35
还是要强调一点,无论什么进制的数,在计算机内部都是一样的,16进制等显示只能是字符串形式。
temp = []
...

非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 07:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表