下表列出了方法 Array#pack 的压缩指令。
指令 | 描述 |
---|---|
@ | 移动到绝对位置。 |
A | ASCII 字符串(填充 space,count 是宽度)。 |
a | ASCII 字符串(填充 null,count 是宽度)。 |
B | 位字符串(降序) |
b | 位字符串(升序)。 |
C | 无符号字符。 |
c | 字符。 |
D, d | 双精度浮点数,原生格式。 |
E | 双精度浮点数,little-endian 字节顺序。 |
e | 单精度浮点数,little-endian 字节顺序。 |
F, f | 单精度浮点数,原生格式。 |
G | 双精度浮点数,network(big-endian)字节顺序。 |
g | 单精度浮点数,network(big-endian)字节顺序。 |
H | 十六进制字符串(高位优先)。 |
h | 十六进制字符串(低位优先)。 |
I | 无符号整数。 |
i | 整数。 |
L | 无符号 long。 |
l | Long。 |
M | 引用可打印的,MIME 编码。 |
m | Base64 编码字符串。 |
N | Long,network(big-endian)字节顺序。 |
n | Short,network(big-endian)字节顺序。 |
P | 指向一个结构(固定长度的字符串)。 |
p | 指向一个空结束字符串。 |
Q, q | 64 位数字。 |
S | 无符号 short。 |
s | Short。 |
U | UTF-8。 |
u | UU 编码字符串。 |
V | Long,little-endian 字节顺序。 |
v | Short,little-endian 字节顺序。 |
w | BER 压缩的整数 \fnm。 |
X | 向后跳过一个字节。 |
x | Null 字节。 |
Z | 与 a 相同,除了 null 会被加上 *。 |
尝试下面的实例,压缩各种数据
#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-
puts "HaiCoder(www.haicoder.net)"
a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
puts a.pack("A3A3A3") #=> "a b c "
puts a.pack("a3a3a3") #=> "a\000\000b\000\000c\000\000"
puts n.pack("ccc") #=> "ABC"
以上实例运行输出结果为:
我们使用了 pack 压缩了数组。