​​​​​​

文章目录

前言

一、ASCII码及其它编码发展的介绍

二、解决方案

1.解码ASCII编码

程序运行演示:

Logic will get you from A to B. Imagination will take you everywhere.

2.编码ASCII码

总结



前言

这罪恶的根源在于一个题目......害!!!!


我靠,啧啧啧.....这么一串是个啥?

原来啊,这是一串8位二进制表示的ASCII编码!

一、ASCII码及其它编码发展的介绍

  1. ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A的编码是65,小写字母 z的编码是122。后128个称为扩展ASCII码。

ASCII编码:

空格(0)对应的ASCII码就是是0;对勾(251)对应的ASCII码是11111011。如果我们想要表示一个空格+对勾,那么就是0+11111011,但是放在一起就是011111011,该怎样”断句“呢?显然出现了混乱,故而:

由于编码表中最多255个字符,所以人们想到了用八位二进制来表示这些字符。比如A(65)对应的二进制码就是1000001,不足8位在前面补0,所以01000001。所以空格+对勾就可以表示为0000000011111011,读取的时候每八位读取一个字符即可。

2.GB2312 & GBK(中国人自己的编码)

很显然,ASCII编码只能显示英文,不能显示汉字,美国佬当年在造计算机的时候肯定也没想到,中国人有一天也会用上计算机,上世界80年代,电脑进入中国,专家们是头疼啊!我中华文化博大精深,光常用汉字就有几千个,你一张ASCII编码表也装不了啊,但是但是,我们中国人从来不怕困难,没有我们就自己造呗,于是,GB2312(存了6763个汉字)就诞生了!

后来,在1995年,专家们又升级了GB2312,也就是现在windows电脑中文版本的编码:GBK.

 3.Unicode(万国码)

在计算机高速发展的那个年代,各个国家都在发展属于自己的编码,中国的GB2312,日本的Shift_JIS,韩国的Euc-kr,于是啊,问题就出现了,你GB2312编写的代码在日本的终端上不能运行,是一堆乱码,这就是编码的混战时代,这可咋整呢?后来是联合国调解,统一了所有的语言,将其放在了Unicode里,这就是万国码的由来!

二、解决方案

1.解码ASCII编码

其实要实现ASCII编码的解码是很简单的,首先,需要将8位二进制数转换为十进制数,再利用python自带的chr函数将十进制数转为ASCII编码表中对应的字符就行了!

代码如下:

print("欢迎使用mc开发的程序!".center(50, '*'),"\n")   # 本人的个性标签
print("请输入你需要解码的code:")
a = input("code:")
li = list(a)    # 先将需要转译的编码由8位二进制码转为列表,便于后面程序的操作
b = []          # 空列表b用于存放解码出来的字符串
m = 0
n = 7
while n <= len(li):x = li[m:n+1:1]       # 将列表进行切片处理b.append(x)m += 9n += 9                # 此处用到算法是为了将空格给去掉,每8位跳一次
print(b,len(b))            # 打印b,看看是否出现错误,此处已经实验过,需要的话请取消注释
for i in range(len(b)):print(len(b[i]),end="")
print('\n')
print("Please judge it's True or False by 8888......always") # 判断是否出现错误,保证每一个元素b[i]都是8位二进制数以免后面转译的时候出错
print("\n")
print("破译成功***你所破译的编码意思是:")
# 定义一个进制转换并输出ASCII字符函数
def two_translate_ten(x):i = 0sum = 0while i <= 7:sum += int(x[i]) * 2**(7-i)i += 1print(chr(sum),end="")              # 将10进制数转换为对应的ASCII字符并无换行输出return 0
j = 0
while j <= len(b)-1:x = b[j]two_translate_ten(x)j += 1                               # 循环调用 two_translate_ten(x)函数
print("\n")
print("感谢使用mc开发的程序!".center(60, '*'))
print("\n")
# for k in range(len(b)):
#     two_translate_ten(b[k])
# 此处代码存在一定的问题,在于切片后的列表内还是一个个小的列表,如果要调用这些小列表里面的数据,就需要进行赋值转换

程序运行演示:

*******************欢迎使用mc开发的程序!******************* 请输入你需要解码的code:      # 这里直接复制粘贴所需要解码的代码就行了
code:01001100 01101111 01100111 01101001 01100011 00100000 01110111 01101001 01101100 01101100 00100000 01100111 01100101 01110100 00100000 01111001 01101111 01110101 00100000 01100110 01110010 01101111 01101101 00100000 01000001 00100000 01110100 01101111 00100000 01000010 00101110 00100000 01001001 01101101 01100001 01100111 01101001 01101110 01100001 01110100 01101001 01101111 01101110 00100000 01110111 01101001 01101100 01101100 00100000 01110100 01100001 01101011 01100101 00100000 01111001 01101111 01110101 00100000 01100101 01110110 01100101 01110010 01111001 01110111 01101000 01100101 01110010 01100101 00101110
888888888888888888888888888888888888888888888888888888888888888888888Please judge it's True or False by 8888......always破译成功***你所破译的编码意思是:
Logic will get you from A to B. Imagination will take you everywhere.************************感谢使用mc开发的程序!************************

Logic will get you from A to B. Imagination will take you everywhere.

(逻辑会带你从A到B,想象会带你到任何地方)

显然,这就是一开始我们提到的那个题目的答案了!

在这个代码中我们需要注意的是题目给出的代码每8位间是有一个空格的,所以在必须将空格去掉,用列表的切片功能就可以实现了!

2.编码ASCII码

其实这个设计是当时在写完上一个编码后突发奇想想要实现的!既然我能够将一段ASCII编码解码为一段英文输出,那么我也一定能够将一段英文编码为一段ASCII编码啦!

代码如下:

print("欢迎使用mc开发的程序!".center(50, '*'))   # 本人的个性标签
print("Please write your code:")
x = input("code:")
i = 0
st = []
# 定义一个10进制转二进制的函数
def two_transfer(x):a = []while x != 0:a.append(x%2)x =int(x/2)a.reverse()while len(a) != 8:a.insert(0,0)        # 避免二进制数不满足8位码的要求,需要在二进制码前面补0st.append(a)print(a)return st                # 返回st,用于后面的调用
while i <= len(x)-1:y = ord(x[i])            # 转为十进制数two_transfer(y)          # 调用10进制转二进制函数,将10进制转为2进制数i += 1
print("\n")
print("Translating your words into codes is successful,it's (你的代码已编译成功):")
print("\n")
for k in st:k.insert(8,' ')          # 加空格for i in range(len(k)):print ("".join(str(k[i])),end='')   # 将‘’去掉后输出
print("\n")
print("\n","感谢使用mc开发的程序!".center(60, '*'))

为了实现能够与前面的解码程序相兼容,这里我们用了.insert (8,' ')插入了一个空格

下面我们以编码歌曲《Star Sky》歌词为例:“Here we are !Riding the sky,Painting the night with sun,You and I, Mirrors of light,Twin flames of fire,Lit in another time and place,I knew your name,I knew your face,Your love and grace,Past and present now embrace,Worlds collide in inner space,Unstoppable, the song we play!”

代码运行情况:

*******************欢迎使用mc开发的程序!*******************
Please write your code:
code:Here we are !Riding the sky,Painting the night with sun,You and I, Mirrors of light,Twin flames of fire,Lit in another time and place,I knew your name,I knew your face,Your love and grace,Past and present now embrace,Worlds collide in inner space,Unstoppable, the song we playTranslating your words into codes is successful,it's (你的代码已编译成功):01001000 01100101 01110010 01100101 00100000 01110111 01100101 00100000 01100001 01110010 01100101 00100000 00100001 01010010 01101001 01100100 01101001 01101110 01100111 00100000 01110100 01101000 01100101 00100000 01110011 01101011 01111001 00101100 01010000 01100001 01101001 01101110 01110100 01101001 01101110 01100111 00100000 01110100 01101000 01100101 00100000 01101110 01101001 01100111 01101000 01110100 00100000 01110111 01101001 01110100 01101000 00100000 01110011 01110101 01101110 00101100 01011001 01101111 01110101 00100000 01100001 01101110 01100100 00100000 01001001 00101100 00100000 01001101 01101001 01110010 01110010 01101111 01110010 01110011 00100000 01101111 01100110 00100000 01101100 01101001 01100111 01101000 01110100 00101100 01010100 01110111 01101001 01101110 00100000 01100110 01101100 01100001 01101101 01100101 01110011 00100000 01101111 01100110 00100000 01100110 01101001 01110010 01100101 00101100 01001100 01101001 01110100 00100000 01101001 01101110 00100000 01100001 01101110 01101111 01110100 01101000 01100101 01110010 00100000 01110100 01101001 01101101 01100101 00100000 01100001 01101110 01100100 00100000 01110000 01101100 01100001 01100011 01100101 00101100 01001001 00100000 01101011 01101110 01100101 01110111 00100000 01111001 01101111 01110101 01110010 00100000 01101110 01100001 01101101 01100101 00101100 01001001 00100000 01101011 01101110 01100101 01110111 00100000 01111001 01101111 01110101 01110010 00100000 01100110 01100001 01100011 01100101 00101100 01011001 01101111 01110101 01110010 00100000 01101100 01101111 01110110 01100101 00100000 01100001 01101110 01100100 00100000 01100111 01110010 01100001 01100011 01100101 00101100 01010000 01100001 01110011 01110100 00100000 01100001 01101110 01100100 00100000 01110000 01110010 01100101 01110011 01100101 01101110 01110100 00100000 01101110 01101111 01110111 00100000 01100101 01101101 01100010 01110010 01100001 01100011 01100101 00101100 01010111 01101111 01110010 01101100 01100100 01110011 00100000 01100011 01101111 01101100 01101100 01101001 01100100 01100101 00100000 01101001 01101110 00100000 01101001 01101110 01101110 01100101 01110010 00100000 01110011 01110000 01100001 01100011 01100101 00101100 01010101 01101110 01110011 01110100 01101111 01110000 01110000 01100001 01100010 01101100 01100101 00101100 00100000 01110100 01101000 01100101 00100000 01110011 01101111 01101110 01100111 00100000 01110111 01100101 00100000 01110000 01101100 01100001 01111001 ************************感谢使用mc开发的程序!************************

可以看到我们已经能够将一段英文转换为ASCII编码啦!


并且每8位一个字符,空格隔开,可以与解码程序相容,感兴趣的读者可以尝试一下。

示范:

*******************欢迎使用mc开发的程序!******************* 请输入你需要解码的code:
code:01001000 01100101 01110010 01100101 00100000 01110111 01100101 00100000 01100001 01110010 01100101 00100000 00100001 01010010 01101001 01100100 01101001 01101110 01100111 00100000 01110100 01101000 01100101 00100000 01110011 01101011 01111001 00101100 01010000 01100001 01101001 01101110 01110100 01101001 01101110 01100111 00100000 01110100 01101000 01100101 00100000 01101110 01101001 01100111 01101000 01110100 00100000 01110111 01101001 01110100 01101000 00100000 01110011 01110101 01101110 00101100 01011001 01101111 01110101 00100000 01100001 01101110 01100100 00100000 01001001 00101100 00100000 01001101 01101001 01110010 01110010 01101111 01110010 01110011 00100000 01101111 01100110 00100000 01101100 01101001 01100111 01101000 01110100 00101100 01010100 01110111 01101001 01101110 00100000 01100110 01101100 01100001 01101101 01100101 01110011 00100000 01101111 01100110 00100000 01100110 01101001 01110010 01100101 00101100 01001100 01101001 01110100 00100000 01101001 01101110 00100000 01100001 01101110 01101111 01110100 01101000 01100101 01110010 00100000 01110100 01101001 01101101 01100101 00100000 01100001 01101110 01100100 00100000 01110000 01101100 01100001 01100011 01100101 00101100 01001001 00100000 01101011 01101110 01100101 01110111 00100000 01111001 01101111 01110101 01110010 00100000 01101110 01100001 01101101 01100101 00101100 01001001 00100000 01101011 01101110 01100101 01110111 00100000 01111001 01101111 01110101 01110010 00100000 01100110 01100001 01100011 01100101 00101100 01011001 01101111 01110101 01110010 00100000 01101100 01101111 01110110 01100101 00100000 01100001 01101110 01100100 00100000 01100111 01110010 01100001 01100011 01100101 00101100 01010000 01100001 01110011 01110100 00100000 01100001 01101110 01100100 00100000 01110000 01110010 01100101 01110011 01100101 01101110 01110100 00100000 01101110 01101111 01110111 00100000 01100101 01101101 01100010 01110010 01100001 01100011 01100101 00101100 01010111 01101111 01110010 01101100 01100100 01110011 00100000 01100011 01101111 01101100 01101100 01101001 01100100 01100101 00100000 01101001 01101110 00100000 01101001 01101110 01101110 01100101 01110010 00100000 01110011 01110000 01100001 01100011 01100101 00101100 01010101 01101110 01110011 01110100 01101111 01110000 01110000 01100001 01100010 01101100 01100101 00101100 00100000 01110100 01101000 01100101 00100000 01110011 01101111 01101110 01100111 00100000 01110111 01100101 00100000 01110000 01101100 01100001 01111001
888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888Please judge it's True or False by 8888......always破译成功***你所破译的编码意思是:
Here we are !Riding the sky,Painting the night with sun,You and I, Mirrors of light,Twin flames of fire,Lit in another time and place,I knew your name,I knew your face,Your love and grace,Past and present now embrace,Worlds collide in inner space,Unstoppable, the song we play************************感谢使用mc开发的程序!************************Process finished with exit code 0

编码与解码程序是相兼容的!

结语

这个问题到此就算是解决了!害....!!!真不容易啊!

OK,有问题可以留言询问哦!

二进制编码转ASCII字符与字符转二进制码的小解码器、编码器相关推荐

  1. java ascii码转字符_java中char对应的ASCII码的转化操作

    java中,char类型变量可以强制转化为int类型变量,int类型变量也可以强制转化成char类型的变量: char c='a'; int i=98; System.out.println((int ...

  2. ASCII表与字符编码

    1 ASCII码表 2 字符编码 一.什么是字符集?什么是编码? 字符(Character)是文字与符号的总称,包括文字.图形符号.数学符号等. 一组抽象字符的集合就是字符集(Charset). 字符 ...

  3. python字符编码转换_Python字符和字符值(ASCII或Unicode码值)转换方法

    目的 将一个字符转化为相应的ASCII或Unicode码,或相反的操作. 方法 对于ASCII码(0~255范围) 代码如下: >>> print ord('A') 65 >& ...

  4. Python中实现ASCII码与字符相互转换

    场景 实现ASCII码与字符的相互转换. 实现 新建mc.py # -*- coding: UTF-8 -*- # Filename :mc.py# author by : badaoc = inpu ...

  5. C# 字符转ASCII码,ASCII码转字符

    字符转ASCII码: public static int Asc(string character)   {    if (character.Length == 1)    {     System ...

  6. java ascii码转字符_一文让你读懂JAVA.IO、字符编码、

    1 JAVA.IO字节流 inputstream.png LineNumberInputStream和StringBufferInputStream官方建议不再使用,推荐使用LineNumberRea ...

  7. pyhton 将ASCII码转换为字符char(),将字符转换为ASCII码ord()

    str=char(97) #将ASCII码转换为字符,str的值为a ascii=ord('a') #将字符转换为ASCII码,ascii的值为97 num=bin(10) #将十进制转换为二进制,n ...

  8. c++中数字与字符,字符与其ASCII转换

    数字转字符:数字+'0' 字符转数字:数字-'0' 字符转ASCII:int(字符) ASCII转字符:char(ASCII)

  9. ASCII码_字符与数字转换等问题

    判断函数 islower(char c) 小写字母 isupper(char c) 大写字母 isdigit(char c) 数字 isalpha(char c) 字母 isalnum(char c) ...

  10. ASCII码与字符对照表(附转换代码)

    目录 ASCII基本字符 ASCII控制字符 ASCII可显示字符 ASCII扩展字符 转换代码 ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符.标准 ...

最新文章

  1. python精进之路 -- open函数
  2. python竞赛试题及答案_Python全国少儿编程竞赛参赛作品《自主数学练习小工具》解析...
  3. 计算机硬件部分可称为裸机,上财信管PPT第3章 计算机硬件与软件基础.ppt
  4. SAP UI5函数节流(Throttle)的一个最简单的例子
  5. 成为linux全栈工程师:2019.05.25
  6. 在家办公,我比上班还累你信吗?
  7. Linux 大文件快速处理小的办法
  8. 从全职高手开始的系统_全职高手8年登上巅峰荣耀,阅文做对了什么?
  9. python模块之wordcloud
  10. kubernetes 集群安装etcd集群,带证书
  11. 西门子1200伺服步进FB块程序 含触摸屏程序,SCL写的FB块,中文注释详细
  12. HTML表单颜色选择器
  13. 电感值、电容值的理解(上)
  14. 一键获取网盘提取码的神器“云盘万能钥匙”
  15. UNI-APP,动态设置view的背景图片
  16. A later version of Node.js is already installed. Setup willnow exit.
  17. IO有Buffered IO 和 Direct IO
  18. 关于面试党的那些刁问题
  19. 没有表情包都不好意思说自己是年轻人——python一键保存几千张表情包图片
  20. quickAction

热门文章

  1. Matlab一元函数绘图方法
  2. linux oracle client 安装,Instant Client 下载 适用于 Linux x86-64(64 位)
  3. Java自学视频整理(持续更新中...) .
  4. pl/sql 存储过程实例
  5. Eclipse+Wildfly10 创建第一个EJB项目
  6. java mencoder_mencoder java linux
  7. 云计算服务器搭建教程,如何搭建云计算平台_搭建云计算平台步骤
  8. 关于win10优化问题
  9. unity3d游戏开发之UV贴图教程
  10. unity3d烘焙教程 持续更新中【2020】