-
打包32位无符号整数
优点数据定长、占用空间恒定
$id1 = 102;
$id2 = 324;
$id3 = 3051;
$id_pack = pack('lll', $id1, $id2, $id3);
var_dump($id_pack);
var_dump(base64_encode($id_pack)); //输出:ZgAAAEQBAADrCwAA (定长字符串)
var_dump(unpack('lid1/lid2/lid3', $id_pack)); //解包为数组
/**
array (size=3)
'id1' => int 102
'id2' => int 324
'id3' => int 3051
*/
-
打包64位无符号浮点与整数
$idl4 = 0xFFFFFFFFFFFFFFFF;
$idl5 = 18446744073709551615;
$sn64 = pack('dJ', $idl4, $idl5);
var_dump($sn64);
var_dump(base64_encode($sn64));
var_dump(unpack('did4/Jid5', $sn64));
PHP: pack - Manual
Code | Description | 中文 |
---|---|---|
a | NUL-padded string | |
A | SPACE-padded string | |
h | Hex string, low nibble first | |
H | Hex string, high nibble first | |
c | signed char | |
C | unsigned char | |
s | signed short (always 16 bit, machine byte order) | |
S | unsigned short (always 16 bit, machine byte order) | |
n | unsigned short (always 16 bit, big endian byte order) | |
v | unsigned short (always 16 bit, little endian byte order) | |
i | signed integer (machine dependent size and byte order) | |
I | unsigned integer (machine dependent size and byte order) | |
l | signed long (always 32 bit, machine byte order) | |
L | unsigned long (always 32 bit, machine byte order) | |
N | unsigned long (always 32 bit, big endian byte order) | |
V | unsigned long (always 32 bit, little endian byte order) | |
q | signed long long (always 64 bit, machine byte order) | 有符号长长整数 (主机字节序) |
Q | unsigned long long (always 64 bit, machine byte order) | 无符号长长整数 (主机字节序) |
J | unsigned long long (always 64 bit, big endian byte order) | 无符号长长整数 (大端字节序) |
P | unsigned long long (always 64 bit, little endian byte order) | 无符号长长整数 (小端字节序) |
f | float (machine dependent size and representation) | |
g | float (machine dependent size, little endian byte order) | |
G | float (machine dependent size, big endian byte order) | |
d | double (machine dependent size and representation) | |
e | double (machine dependent size, little endian byte order) | |
E | double (machine dependent size, big endian byte order) | |
x | NUL byte | |
X | Back up one byte | |
Z | NUL-padded string (new in PHP 5.5) | |
@ | NUL-fill to absolute position |
PHP: 深入pack/unpack - 陈亦
a -- 将字符串空白以 NULL 字符填满
A -- 将字符串空白以 SPACE 字符 (空格) 填满
h -- 16进制字符串,低位在前以半字节为单位
H -- 16进制字符串,高位在前以半字节为单位
c -- 有符号字符
C -- 无符号字符
s -- 有符号短整数 (16位,主机字节序)
S -- 无符号短整数 (16位,主机字节序)
n -- 无符号短整数 (16位, 大端字节序)
v -- 无符号短整数 (16位, 小端字节序)
i -- 有符号整数 (依赖机器大小及字节序)
I -- 无符号整数 (依赖机器大小及字节序)
l -- 有符号长整数 (32位,主机字节序)
L -- 无符号长整数 (32位,主机字节序)
N -- 无符号长整数 (32位, 大端字节序)
V -- 无符号长整数 (32位, 小端字节序)
f -- 单精度浮点数 (依计算机的范围)
d -- 双精度浮点数 (依计算机的范围)
x -- 空字节
X -- 倒回一位
@ -- 填入 NULL 字符到绝对位置
网友评论