在了解string.pack string.unpack 之前,先了解一下 大端编码和小端编码
大端字节序(网络字节序) 和 小端字节序(主机字节序)
大端就是将高位字节放到内存的低地址端,低位字节放到高地址端。网络传输中(比如TCP/IP)低地址端(高位字节)放在流的开始,对于2个字节的字符串(ab),传输顺序为:a(0-7bit)、b(8-15bit)。
之所以又称为 网络字节序,是因为网络传输时,默认是大端编码传输的。
如果把计算机的内存看做是一个很大的字节数组,一个字节包含 8 bit 信息可以表示 0-255 的无符号整型,以及 -128—127 的有符号整型。当存储一个大于 8 bit 的值到内存时,这个值常常会被切分成多个 8 bit 的 segment 存储在一个连续的内存空间,一个 segment 一个字节。有些处理器会把高位存储在内存这个字节数组的头部,把低位存储在尾部,这种处理方式叫 大端字节序 ,有些处理器则相反,低位存储在头部,高位存储在尾部,称之为 小端字节序 。
lua string.pack string.unpack
函数 pack 负责将不同的变量打包在一起,成为一个字节字符串。
函数 unpack 将字节字符串解包成为变量。
字节符 b 打包解包 pack(“b”,str) unpack(“b”,str)
local unpack = string.unpack
local pack = string.pack
local str1 = pack(">b",-128) -