—计算机中以字节为单位,每个地址对应一个字节,一个字节8bit。在计算机系统中,如果大于一个字节,就需要区分字节顺序。
大端和小端即网络字节序,顾名思义,当数据在网络上传输时使用什么样的方式排序。常见的字节顺序分为:大端(Big Endian)和小段(Litter Endian)。想要理解什么是大端和小端,首先需要明确下面几个概念
在一个n进制中,最左边的位叫最高有效位,最右边的叫最低有效位。
举例说明:
十进制整数:123456789
二进制表示:0000 0111 0101 1011 1100 1101 0001 0101
十六进制表示:07 5B CD 15
按照从右向左的方向,二进制中,0101是低字节、0000是高字节;
十六进制中,15是低字节,07是高字节。
在内存中,多字节对象都是被存储为连续的字节序列。假设将int整型在内存中的起始地址(首个字节存储位置)为0x1000,那么另外三个字节就存储在0x1001~0x1003。不管存储的字节顺序是怎样的,内存地址的分配都是从小到大的增长。其中0x1000称为低地址端,0x1003称为高地址端。
大端:高字节存放在低地址,低字节存放在高地址
小端:低字节存放在低地址,高字节存放在高地址
还是以上面的int 123456789为例,十六进制表示: 07 5B CD 15
内存地址(低——>高) | 字节存储顺序 | |
---|---|---|
大端(Big Endian) | 0x1000 0x1001 0x1002 0x1003 0x07 0x5B 0xCD 0x15 | 高字节存放在低地址,低字节存放在高地址 |
小端(Litter Endian) | 0x1000 0x1001 0x1002 0x1003 0x15 0xCD 0x5B 0x07 | 低字节存放在低地址高字节存放在高地址 |
用处:
按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
按照指定格式将字节流转换为Python指定的数据类型;
处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
处理c语言中的结构体;
struct 最常用的方法有两个:
例子:
def demo1():
import struct
x = struct.unpack('
同理有
2. Python encode() 方法以 encoding 指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。
str——bytes
a = bytes.decode(encoding='ISO-8859-1')
b = str(bytes,encoding='ISO-8859-1')
a、b等价
encode:编码
decode:解码
python内部编码方式为unicode,decode将其他编码方式转换成unicode编码方式,encode将unicode转换成其他编码方式。
因此unicode相当于一个中转:
(1)decode->unicode->encode
(2)encode->unicode->decode
通常,整形数在内存中是以 补码 的形式存放的,输出的时候同样也是按照 补码 输出的。