美文网首页
pack 与 unpack 使用笔记

pack 与 unpack 使用笔记

作者: czxin | 来源:发表于2018-05-31 11:15 被阅读0次
  • 打包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 字符到绝对位置

相关文章

网友评论

      本文标题:pack 与 unpack 使用笔记

      本文链接:https://www.haomeiwen.com/subject/qwxqsftx.html