当使用非原字节大小和对齐方式即 &#39;<&#39;, &#39;>&#39;, &#39;=&#39;, and &#39;!&#39; 时不会添加任何填充。
格式字符
我们来看下字符都有哪些格式:
格式
c 类型
python 类型
标准大小(字节)
x
填充字节
无
c
char
长度为 1 的字节串
1
b
signed char
整数
1
b
unsigned char
整数
1
?
_bool
bool
1
h
short
整数
2
h
unsigned short
整数
2
i
int
整数
4
i
unsigned int
整数
4
l
long
整数
4
l
unsigned long
整数
4
q
long long
整数
8
q
unsigned long long
整数
8
n
ssize_t
整数
n
size_t
整数
e
(6)
浮点数
2
f
float
浮点数
4
d
double
浮点数
8
s
char[]
字节串
p
char[]
字节串
p
void *
整数
格式数字
举个例子,比如我们要打包一个int对象,我们可以这样写:
in [101]: from struct import * in [102]: pack('i',10) out[102]: b'nx00x00x00' in [103]: unpack('i',b'nx00x00x00') out[103]: (10,) in [105]: calcsize('i') out[105]: 4
上面的例子中,我们打包了一个int对象10,然后又对其解包。并且计算了 i 这个格式的长度为4字节。
当使用某一种整数格式 (&#39;b&#39;, &#39;b&#39;, &#39;h&#39;, &#39;h&#39;, &#39;i&#39;, &#39;i&#39;, &#39;l&#39;, &#39;l&#39;, &#39;q&#39;, &#39;q&#39;) 打包值 x 时,如果 x 在该格式的有效范围之外则将引发 struct.error。
格式字符
除了数字之外,最常用的就是字符和字符串了。
我们先看下怎么使用格式字符,因为字符的长度是1个字节,我们需要这样做:
in [109]: pack('4c',b'a',b'b',b'c',b'd') out[109]: b'abcd' in [110]: unpack('4c',b'abcd') out[110]: (b'a', b'b', b'c', b'd') in [111]: calcsize('4c') out[111]: 4
字符前面的b,表示这是一个字符,否则将会被当做字符串。
格式字符串
再看下字符串的格式:
in [114]: pack('4s',b'abcd') out[114]: b'abcd' in [115]: unpack('4s',b'abcd') out[115]: (b'abcd',) in [116]: calcsize('4s') out[116]: 4 in [117]: calcsize('s') out[117]: 1