python中的进制转换以及浮点数二进制转换
为什么要注意这三点:
1、首先是项目中用到的进制转换,常用的int ord hex 以及编写的转换函数,作为记录
2、其次是python 3相对于旧版主要的区别就在这里,主要是bytes 和 string的区别
3、浮点数进制间的转换,主要是记住转换格式标准就行
(1)、进制间的转换
二进制,十六机制转十进制比较容易,直接int(‘7a’,16)就可以了,但是注意这里是单字节,也就是8位的。
十进制也可以转十六机制和二进制,使用ord() hex() 方法便可,注意也是单字节的转换,多字节的则不适用,需要重新进行程序的 编写,比如说双字节的十六进制转换为十进制,可以先进行单字节的转换,然后256*高字节的十进制+低字节的十进制。
(注:有一些封装好的库可以方案进行多字节的转换,但是其基本原理还是需要知道的)
(2)、bytes与string的区别,python3相比于Python2做了哪些改进
转自:https://www.cnblogs.com/chownjy/p/6625299.html
此外(该篇博客从多方面介绍了2与3之间的差别:https://www.cnblogs.com/hanggegege/p/5840005.html)
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode
,由str
类型表示,二进制数据则由bytes
类型表示。Python 3不会以任意隐式的方式混用str
和bytes
,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。而python2则没有进行区分,比如在2中我们可以直接使用read()进行读取(并不是readlines函数),2中读到的是一个字符串str,但是3中读到的却是一个字节bytes。
下面让我们深入分析一下二者的区别和联系。
编码发展的历史
在谈bytes
和str
之前,需要先说说关于编码是如何发展的。。
在计算机历史的早期,美国为代表的英语系国家主导了整个计算机行业,26个英文字母组成了多样的英语单词、语句、文章。因此,最早的字符编码规范是ASCII码,一种8位即1个字节的编码规范,它可以涵盖整个英语系的编码需要。
编码是什么?编码就是把一个字符用一个二进制来表示。我们都知道,所有的东西,不管是英文、中文还是符号等等,最终存储在磁盘上都是01010101这类东西。在计算机内部,读取和存储数据归根结底,处理的都是0和1组成的比特流。问题来了,人类看不懂这些比特流,如何让这些010101对人类变得可读呢?于是出现了字符编码,它是个翻译机,在计算机内部某个地方,透明的帮我们将比特流翻译成人类可以直接理解的文字。对于一般用户,不需要知道这个过程是什么原理,是怎么执行的。但是对于程序员却是个必须搞清楚的问题。
以ASCII
编码为例,它规定1个字节8个比特位代表1个字符的编码,也就是“00000000”这么宽,一个一个字节的解读。例如:01000001表示大写字母A,有时我们会“偷懒"的用65这个十进制来表示A在ASCII
中的编码。8个比特位,可以没有重复的最多表示2的8次方(255)个字符。
后来,计算机得到普及,中文、日文、韩文等等国家的文字需要在计算机内表示,ASCII的255位远远不够,于是标准组织制定出了叫做UNICODE的万国码,它规定任何一个字符(不管哪国的)至少以2个字节表示,可以更多。其中,英文字母就是用2个字节,而汉字是3个字节。这个编码虽然很好,满足了所有人的要求,但是它不兼容ASCII
,同时还占用较多的空间和内存。因为,在计算机世界更多的字符是英文字母,明明可以1个字节就能够表示,非要用2个。
于是UTF-8
编码应运而生,它规定英文字母系列用1个字节表示,汉字用3个字节表示等等。因此,它兼容ASCII
,可以解码早期的文档。UTF-8
很快就得到了广泛的应用。
在编码的发展历程中,我国还创造了自己的编码方式,例如GBK
,GB2312
,BIG5
。他们只局限于在国内使用,不被国外认可。在GBK
编码中,中文汉字占2个字节。
bytes和str之间的异同
回到bytes
和str
的身上。bytes
是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。因为编码方式的不同,对这个比特流的解读也会不同,对实际使用造成了很大的困扰。下面让我们看看Python是如何处理这一系列编码问题的:
>>> s = "中文"
>>> s
'中文'
>>> type(s)
<class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
从例子可以看出,s
是个字符串类型。Python有个内置函数bytes()
可以将字符串str
类型转换成bytes
类型,b
实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'
这种形式,开头的b
表示这是一个bytes
类型。\xe4
是十六进制的表示方式,它占用1个字节的长度,因此”中文“被编码成utf-8
后,我们可以数得出一共用了6个字节,每个汉字占用3个,这印证了上面的论述。在使用内置函数bytes()
的时候,必须明确encoding
的参数,不可省略。
我们都知道,字符串类str
里有一个encode()
方法,它是从字符串向比特流的编码过程。而bytes
类型恰好有个decode()
方法,它是从比特流向字符串解码的过程。除此之外,我们查看Python源码会发现bytes
和str
拥有几乎一模一样的方法列表,最大的区别就是encode
和decode
。
从实质上来说,字符串在磁盘上的保存形式也是01的组合,也需要编码解码。
如果,上面的阐述还不能让你搞清楚两者的区别,那么记住下面两几句话:
在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。
使用
bytes
类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。Python已经严格区分了
bytes
和str
两种数据类型,你不能在需要bytes
类型参数的时候使用str
参数,反之亦然。这点在读写磁盘文件时容易碰到。
在bytes和str的互相转换过程中,实际就是编码解码的过程,必须显式地指定编码格式。
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
>>> s1 = str(b)
>>> s1
"b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'"
>>> type(s1)
<class 'str'>
>>> s1 = str(b, encoding='utf-8')
>>> s1
'中文'
>>> type(s1)
<class 'str'>
我们再把字符串s1,转换成gbk编码的bytes类型:
>>> s1
'中文'
>>> type(s1)
<class 'str'>
>>> b = bytes(s1, encoding='gbk')
>>> b
b'\xd6\xd0\xce\xc4'
(3)、其次是浮点数的转换
进行记录,看着两个博客就行了
浮点数最主要的是掌握其编码的格式,掌握好编码的格式之后就可以方便的进行整数位和小数位的二进制计算了,剩下的就可以直接套入公式进行十六进制的计算,或者进行反向计算了。
https://blog.csdn.net/zhengyanan815/article/details/78550073?locationNum=2&fps=1
https://www.cnblogs.com/z-books/p/6909962.html
python中的进制转换以及浮点数二进制转换相关推荐
- python中各进制的表示及其转换
[时间]2018.11.29 [题目]python中各进制的表示及其转换 参考链接:https://blog.csdn.net/weixin_40717096/article/details/8019 ...
- 【Python中整数进制的转换】
[小白从小学Python.C.Java] [Python-计算机等级考试二级] Python中整数进制的转换 选择题 在Python3.9中,以下python代码输出什么? myNumber = 10 ...
- python中不同进制的整数之间可以直接运算_python学习第三天总结(进制与位运算,)...
进制 计算机在存储数字的时候都是以二进制的形式去存的 十进制.十六进制.八进制.二进制 1.十进制 基数:0,1,2,3,4,5,6,7,8,9 进位:逢10进1 每一位的值: 111 = 1 * 1 ...
- Python中各种进制之间的转换
Python整数能够以十六进制,八进制和二进制来编写,作为一般以10位基数的十进制计数法的补充. 一: 上面三种进制的常用表示 >>> 0o1, 0o20, 0o377 # 八进制常 ...
- python中不同进制的整数之间可以直接运算吗_【python公开课|要想真的做好python,那么学会python整数的不同进制很重要】- 环球网校...
[摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...
- python中不同进制的整数之间可以直接运算_Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- Python中各进制间的转换
十进制的转换 '''十进制转化为二进制.八进制.十六进制''' # 1.十进制转化为二进制 bin() a = bin(10) print(a) # 0b1010 # 2.十进制转换位八进制 c = ...
- Python中的进制书写
为了方便计算和书写,Python中整数可以用不同的进制方式书写,其格式为0+进制方式(通常为一个大写字母)+相应进制的数据.具体对应前缀如下 二进制:0b/0B 八进制:0O 十进制:无 十六进制:0 ...
- 讲清楚进制转换、进制计算那些事 —— 二进制转换十进制、十六进制
讲清楚进制转换.进制计算那些事 信息在计算机中的表示 1.易于物理实现 2.可靠性高 3.运算规则简单 数制及其不同进制之间的转换 1.常用进制数及其对应关系 表 1-2 常见进制数所使用的基本符号 ...
最新文章
- Node.js 指南(Docker化Node.js Web应用程序)
- centos7 中iptables、firewalld 、netfilter 关系
- 面试可能遇到的问题总结【二】
- ML之xgboost:利用xgboost算法(sklearn+3Split)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
- create-react-app应用的入口定义
- mysql500万数据查询速度_是什么影响了数据库查询速度
- 计算机初级包括php吗,计算机的基本组成包括什么
- C语言动态内存管理和动态内存分配
- Redis站点流量统计HyperLogLog
- vim设置Tab为空格
- java gdal生成彩色tiff文件 并压缩大小
- IG02数据准备(翻译)
- 元素水平垂直居中的六种方式
- 如何绕过图片格式限制上传木马获取WebShell
- 【cnpm】cnpm的安装方法(附详细步骤)
- sja1000调试经验
- 【STB】未来机顶盒的发展方向
- 操作系统——显示器的驱动
- 正切函数的查表法实现
- 上位机下位机概念详解
热门文章
- 关于EPSON针式打印机连续进纸的设定
- 1.1.Eureka【集群】服务注册中心
- 【计算机视觉】有限标签的场景图预测
- ajax下载文档 ClientAbortException: java.net.SocketException: Connection reset by pee
- 各种手机处理器排行榜_最新手机CPU排名(排行榜)
- python控制手机屏幕亮度的软件_使用Python脚本更改显示器亮度
- 金融行业数据安全治理案例汇编(2022年)
- javascript分支语句
- 【游戏系列】用vue做个看图猜成语游戏吧
- 复制内容后自动跳转到淘宝客户端