查看当前系统是大端还是小端: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 字节串转换以及大小端相关的几个方法相关推荐

  1. python中单位转换_Python字节单位转换实例

    我就废话不多说了,直接上代码! from enum import Enum class Values(): values={'B':1} @staticmethod def getValues(): ...

  2. python16进制转10进制_python 字节串及10进制,16进制相关转换

    进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: in ...

  3. python单位转换编程英寸厘米_Python字节单位转换实例

    我就废话不多说了,直接上代码! from enum import Enum class Values(): values={'B':1} @staticmethod def getValues(): ...

  4. python字节码转换_python字节码(转)

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  5. python各进制、字节串间的转换

    >>> i = 13 >>> bin(i) '0b1101' >>> oct(i) '0o15' >>> hex(i) '0xd ...

  6. python 十六进制转中文_python进制转换

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 进制转换:进制转换是人们利用符号来计数的方法. 进制转换由一组数码符号和两个基本 ...

  7. [转载] python隐式转换_Python | 数据类型的转换 显式转换 隐式转换

    参考链接: Python类型转换和类型转换 显式转换 # 首先对要转换的数据进行变量的声明 float_number = 1.5 int_number = 2 # 其他类型转换到字符串,使用的是str ...

  8. python十进制转八进制_python进制转换(二进制、十进制和十六进制)及注意事项...

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  9. python 二进制数 转字符串_Python二进制串转换为通用字符串的方法

    一个小问题 今天在做一个实验时,需要对一个包含中英文词汇的TXT文件进行读入和整理. Python代码的编码规则为UTF-8.在读入时,文件的每行是二进制串,形如: b'heroesxff..... ...

最新文章

  1. MySQL Cluster 日常维护
  2. Linux750 权限,linux系统文件权限简明介绍
  3. 签约华佗致力精准饮食 谋定·健康中国-李喜贵:健康干预治未病
  4. canvas画布属性globalAlpha 和 createRadialGradient函数出现的设置问题
  5. Visual Studio 即时窗口实用技巧
  6. IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密
  7. 考研复习安排——第一阶段末
  8. IE浏览器--internet选项--连接中的设置是灰色
  9. 02_HBase集群部署
  10. 「Algospot」量化QUANTIZE
  11. 使用 Google Analytics 的网址构建器来监控广告投放
  12. oracle sqlldr命令6,oracle sqlldr命令
  13. 如何提高Python编程能力?
  14. sql 根据出生日期计算年龄
  15. 产品经理必须会的软件——office
  16. Android简单的计步器应用实现
  17. struts2自定义验证器(身份证验证)
  18. 说起刘慈欣,不要只知道《三体》和《流浪地球》
  19. 【THUWC2017】在美妙的数学王国中畅游(bzoj5020)
  20. text、html、val、attr(Jquery取值方法)

热门文章

  1. CSS(一) 文字/文体属性、颜色属性和选择器合集
  2. C++从入门到进阶的系列书籍推荐
  3. JuiceSSH - SSH Client(Android免费的SSH客户端)
  4. 联合体c语言指针,C++中联合体(union)的使用
  5. 读书笔记9 《发现的乐趣》 理查德-费曼
  6. javascript几种写空格符的方法
  7. chrome浏览器快速访问stackoverflow
  8. css实现背景图片自动适应
  9. 一个域名对应多个IP
  10. mysql数据库存储过程详解