Perl pack 函数
描述
此函数计算 LIST 中的表达式并将它们打包到 EXPR 指定的二进制结构中。 使用下表中显示的字符指定格式 −
每个字符后面可以选择跟随一个数字,它指定被打包的值类型的重复计数。根据格式,它是半字节、字符甚至位。 对于 LIST 中剩余的值,* 值会重复。 可以使用 unpack 函数对值进行解包。
例如,a5 表示需要五个字母。 b32 表示需要 32 位。 h8 表示需要 8 个 nybbles(或 4 个字节)。 P10 表示该结构为 10 个字节长。
语法
以下是此函数的简单语法 −
pack EXPR, LIST
返回值
此函数返回 LIST 中数据的打包版本,使用 TEMPLATE 确定其编码方式。
这是给出要使用的值的表 TEMPLATE.
| 序号 | 字符 & 说明 |
|---|---|
| 1 | a 用空字符填充的 ASCII 字符串 |
| 2 | A 用空格填充的 ASCII 字符串 |
| 3 | b 位串,最低优先 |
| 4 | B 位串,最高优先 |
| 5 | c 带符号的字符(范围通常为 -128 到 127) |
| 6 | C 无符号字符(通常为 8 位) |
| 7 | d 双精度浮点数 |
| 8 | f 单精度浮点数 |
| 9 | h 十六进制字符串,最低位在前 |
| 10 | H 十六进制字符串,最高位在前 |
| 11 | i 有符号整数 |
| 12 | I 无符号整数 |
| 13 | l 有符号长整数 |
| 14 | L 无符号长整数 |
| 15 | n 按网络顺序排列的短整数 |
| 16 | N 网络顺序的长整数 |
| 17 | p 指向字符串的指针 |
| 18 | s 有符号短整数 |
| 19 | S 无符号短整数 |
| 20 | u 转换为uuencode格式 |
| 21 | v VAX(小端)顺序的短整数 |
| 22 | V VAX 顺序的长整数 |
| 23 | x 一个空字节 |
| 24 | X 表示"返回一个字节" |
| 25 | @ 用空值填充(ASCII 0) |
示例
以下是显示其基本用法的示例代码 −
#!/usr/bin/perl -w
$bits = pack("c", 65);
# prints A, which is ASCII 65.
print "bits are $bits\n";
$bits = pack( "x" );
# $bits is now a null chracter.
print "bits are $bits\n";
$bits = pack( "sai", 255, "T", 30 );
# creates a seven charcter string on most computers'
print "bits are $bits\n";
@array = unpack( "sai", "$bits" );
#Array now contains three elements: 255, T and 30.
print "Array $array[0]\n";
print "Array $array[1]\n";
print "Array $array[2]\n";
执行上述代码时,会产生以下结果 −
bits are A bits are bits are �T Array 255 Array T Array 30

