python 大小端转换_Python 字节串转换以及大小端相关的几个方法
查看当前系统是大端还是小端:sys.byteorder,Windows是小端的,而小端在我们看来是和常规反向地
字节串的赋值表达式
bytes((1,2,ord('1'),ord('2'))) # 可迭代类型,元素是数字
Out[226]: b'\x01\x0212'
bytes((0xff,))
Out[231]: b'\xff'
bytes(3) # 生成3个字节的字节串
Out[229]: b'\x00\x00\x00'
字节串大小端互换 bytes[::-1]
字节自己的次序单位就是1字节(FF)而非4比特(F),也不是1比特(1),所以字节串的切片法就是切换大小端的方式,不过因为没有标记描述某字节串是大端还是小端,所以建议仅最初(加载小端)和最终(写入或展示小端)的时候才使用大小端互换,一般就用我们习惯的大端去表示
在整数与字节串互转以及struct那里有大小端结构的设置
struct
他是专门解释十六进制和各种数据类型的,但是他只是解释层,而非真实层,他是以他内有的算法而将对应的类型转换成十六进制,并不是真的从内存中读取真实的存储结构,例如超位整数。
struct的作用是把指定格式的数据打包成二进制,解包同理。
@: native order, size & alignment (default)
=: native order, std. size & alignment
<: little-endian std. size alignment>
>: big-endian, std. size & alignment
!: same as >
字符字节顺序大小对齐方式@按原字节按原字节按原字节
=按原字节标准无
>大端标准无
!网络(=大端)标准
格式C类型Python类型标准大小x填充字节无
cchar长度为1的字节串1
bsignedchar整数1
Bunsignedchar整数1
?_Boolbool1
hshort整数2
Hunsignedshort整数2
iint整数4
Iunsignedint整数4
long整数4
Lunsignedlong整数4
qlonglong整数8
Qunsignedlonglong整数8
nssize_t整数
Nsize_t整数
e浮点数2
ffloat浮点数4
ddouble浮点数8
schar[]字节串
pchar[]字节串
Pvoid*整数
struct.pack('L', 0x1234ab)
Out[266]: b'\xab4\x12\x00'
struct.pack('>L', 0x1234ab)
Out[240]: b'\x00\x124\xab'
struct.pack('9si2s',b'HTTP/1.1 ',200,b'OK')
这里要注意字符串需要添加字符个数的,我就在这里蒙了很久,写不出来
这里
其他类型与字节串互转
· 字符串 str.encode;bytes.decode
· 整数 int.to_bytes;int.from_bytes,这里有一个btyeorder的参数,可以直接设置输出是大端还是小端
int.to_bytes(16,length=2,byteorder='big')
Out[78]: b'\x00\x10'
· 十六进制字符串 bytes.fromhex,binascii.unhexlify(hexstr);bytes.hex
binascii.unhexlify('1ff3')
Out[145]: b'\x1f\xf3'
binascii.unhexlify(b'1ff3')
Out[146]: b'\x1f\xf3'
binascii.hexlify(b'1ff3')
Out[147]: b'31666633'
binascii.hexlify(b'\x1f\xf3')
Out[148]: b'1ff3'
'1ff3'.encode()
Out[154]: b'1ff3'
这里b’1ff3’虽然是字节串类型,但是他表示的就是一串ascii字符,这里会自动将他作为一串ascii字符串处理,就是’1ff3’,而在第三行,他又被当作字节串处理,解码出的又被当作字符串处理,有点绕,我只能说这个方法编写的比较模糊。
字节码在表示时有两种模式,纯十六进制表示,就是上面unhexlify的结果。
还有就是尝试尽可能使用ascii表示,例如HxD,其实这才应该是Python的默认模式,而binascii的默认模式是纯hex模式。
‘b17c9385d9783963a8’这是从内存中读取的片段,而他默认的bytes显示是:
b’\xb1|\x93\x85\xd9x9c\xa8’
>>> binascii.hexlify(b'\xb1|\x93\x85\xd9x9c\xa8')
b'b17c9385d9783963a8'
嗯嗯,原来如此,至少这个功能的意思是把
len(b'b17c9385d9783963a8')
Out[191]: 18
len(b'\xb1|\x93\x85\xd9x9c\xa8')
Out[192]: 9
binascii.hexlify(b'b17c9385d9783963a8')
Out[194]: b'623137633933383564393738333936336138'
b'b17c9385d9783963a8'.hex()
Out[196]: '623137633933383564393738333936336138'
但是为什么两个的长度不一样呢,这里b又被当作了一串ascii的表示,b1是’b1’而非0xb1。
又或者我在里面加上\x,他只会把挨着他的后面两个值当作hex而非ascii处理。
那么若想hexlify出b’b17c9385d9783963a8’,还有其他方法吗?
bytes.fromhex('b17c9385d9783963a8')
Out[199]: b'\xb1|\x93\x85\xd9x9c\xa8'
binascii.hexlify(b'\xb1|\x93\x85\xd9x9c\xa8')
Out[200]: b'b17c9385d9783963a8'
而最初的b’\xb1|\x93\x85\xd9x9c\xa8’,是我string_st的内存片段。我只能说binascii的结构不够严谨。
原文链接:https://blog.csdn.net/jhsxy2005/article/details/113250954
python 大小端转换_Python 字节串转换以及大小端相关的几个方法相关推荐
- python中单位转换_Python字节单位转换实例
我就废话不多说了,直接上代码! from enum import Enum class Values(): values={'B':1} @staticmethod def getValues(): ...
- python16进制转10进制_python 字节串及10进制,16进制相关转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: in ...
- python单位转换编程英寸厘米_Python字节单位转换实例
我就废话不多说了,直接上代码! from enum import Enum class Values(): values={'B':1} @staticmethod def getValues(): ...
- python字节码转换_python字节码(转)
了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...
- python各进制、字节串间的转换
>>> i = 13 >>> bin(i) '0b1101' >>> oct(i) '0o15' >>> hex(i) '0xd ...
- python 十六进制转中文_python进制转换
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 进制转换:进制转换是人们利用符号来计数的方法. 进制转换由一组数码符号和两个基本 ...
- [转载] python隐式转换_Python | 数据类型的转换 显式转换 隐式转换
参考链接: Python类型转换和类型转换 显式转换 # 首先对要转换的数据进行变量的声明 float_number = 1.5 int_number = 2 # 其他类型转换到字符串,使用的是str ...
- python十进制转八进制_python进制转换(二进制、十进制和十六进制)及注意事项...
使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...
- python 二进制数 转字符串_Python二进制串转换为通用字符串的方法
一个小问题 今天在做一个实验时,需要对一个包含中英文词汇的TXT文件进行读入和整理. Python代码的编码规则为UTF-8.在读入时,文件的每行是二进制串,形如: b'heroesxff..... ...
最新文章
- MySQL Cluster 日常维护
- Linux750 权限,linux系统文件权限简明介绍
- 签约华佗致力精准饮食 谋定·健康中国-李喜贵:健康干预治未病
- canvas画布属性globalAlpha 和 createRadialGradient函数出现的设置问题
- Visual Studio 即时窗口实用技巧
- IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密
- 考研复习安排——第一阶段末
- IE浏览器--internet选项--连接中的设置是灰色
- 02_HBase集群部署
- 「Algospot」量化QUANTIZE
- 使用 Google Analytics 的网址构建器来监控广告投放
- oracle sqlldr命令6,oracle sqlldr命令
- 如何提高Python编程能力?
- sql 根据出生日期计算年龄
- 产品经理必须会的软件——office
- Android简单的计步器应用实现
- struts2自定义验证器(身份证验证)
- 说起刘慈欣,不要只知道《三体》和《流浪地球》
- 【THUWC2017】在美妙的数学王国中畅游(bzoj5020)
- text、html、val、attr(Jquery取值方法)