pack 将数据打包成二进制字符串
发表日期:2021-07-01 10:15:42 | 来源: | | 浏览(1342) 分类:杂项 函数
pack
(PHP 4, PHP 5, PHP 7, PHP 8)
pack — 将数据打包成二进制字符串
说明
$format
, mixed ...$values
): string
将输入参数打包成 format
格式的二进制字符串。
这个函数的思想来自 Perl,所有格式化代码(format
)的工作原理都与
Perl 相同。 但是,缺少了部分格式代码,比如 Perl 的 “u”。
注意,有符号值和无符号值之间的区别只影响函数 unpack(),在那些使用有符号和无符号格式代码的地方 pack() 函数产生相同的结果。
参数
-
format
-
format
字符串由格式代码组成,后面跟着一个可选的重复参数。重复参数可以是一个整数值或者*
值来重复到输入数据的末尾。对于 a, A, h, H 格式化代码,其后的重复参数指定了给定数据将会被使用几个字符串。对于 @,其后的数字表示放置剩余数据的绝对定位(之前的数据将会被空字符串填充),对于其他所有内容,重复数量指定消耗多少个数据参数并将其打包到生成的二进制字符串中。目前已实现的格式如下:
pack() 格式字符 代码 描述 a 以 NUL 字节填充字符串 A 以 SPACE(空格) 填充字符串 h 十六进制字符串,低位在前 H 十六进制字符串,高位在前 c 有符号字符 C 无符号字符 s 有符号短整型(16位,主机字节序) S 无符号短整型(16位,主机字节序) n 无符号短整型(16位,大端字节序) v 无符号短整型(16位,小端字节序) i 有符号整型(机器相关大小字节序) I 无符号整型(机器相关大小字节序) l 有符号长整型(32位,主机字节序) L 无符号长整型(32位,主机字节序) N 无符号长整型(32位,大端字节序) V 无符号长整型(32位,小端字节序) q 有符号长长整型(64位,主机字节序) Q 无符号长长整型(64位,主机字节序) J 无符号长长整型(64位,大端字节序) P 无符号长长整型(64位,小端字节序) f 单精度浮点型(机器相关大小) g 单精度浮点型(机器相关大小,小端字节序) G 单精度浮点型(机器相关大小,大端字节序) d 双精度浮点型(机器相关大小) e 双精度浮点型(机器相关大小,小端字节序) E 双精度浮点型(机器相关大小,大端字节序) x NUL 字节 X 回退已字节 Z 以 NUL 字节填充字符串空白 @ NUL 填充到绝对位置 -
values
-
返回值
返回包含数据的二进制字符串, 或者在失败时返回 false
。
更新日志
版本 | 说明 |
---|---|
8.0.0 |
此函数不再在失败时返回 false 。
|
7.2.0 | float 和 double 类型支持大端和小端。 |
7.0.15,7.1.1 | 添加了 “e”,“E”,“g” 和 “G” 代码以启用 float 和 double 的字节顺序支持。 |
范例
示例 #1 pack() 范例
<?php $binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66); ?>
输出结果为长度为 6 字节的二进制字符串,包含以下序列 0x12, 0x34, 0x78, 0x56, 0x41, 0x42。
注释
Note that PHP internally stores int values as
signed values of a machine-dependent size (C type long
).
Integer literals and operations that yield numbers outside the bounds of the
int type will be stored as float.
When packing these floats as integers, they are first cast into the integer
type. This may or may not result in the desired byte pattern.
The most relevant case is when packing unsigned numbers that would
be representable with the int type if it were unsigned.
In systems where the int type has a 32-bit size, the cast
usually results in the same byte pattern as if the int were
unsigned (although this relies on implementation-defined unsigned to signed
conversions, as per the C standard). In systems where the
int type has 64-bit size, the float most
likely does not have a mantissa large enough to hold the value without
loss of precision. If those systems also have a native 64-bit C
int
type (most UNIX-like systems don't), the only way to
use the I
pack format in the upper range is to create
int negative values with the same byte representation
as the desired unsigned value.
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- connection_aborted 检查客户端是否已经断开(0)
- connection_status 返回连接的状态位(0)
- constant 返回一个常量的值(0)
- define 定义一个常量(0)
- defined 检查某个名称的常量是否存在(0)
- die 等同于 exit()(0)
- eval 把字符串作为PHP代码执行(0)
- exit 输出一个消息并且退出当前脚本(0)
- get_browser 获取浏览器具有的功能(0)
- __halt_compiler 中断编译器的执行(0)
- highlight_file 语法高亮一个文件(0)
- highlight_string 字符串的语法高亮(0)
- hrtime 获取系统的高精度时间(0)
- ignore_user_abort 设置客户端断开连接时是否中断脚本的执行(0)
- pack 将数据打包成二进制字符串(0)
- php_strip_whitespace 返回删除注释和空格后的PHP源码(0)
- sapi_windows_cp_conv Convert string from one codepage to another(0)
- sapi_windows_cp_get Get current codepage(0)
- sapi_windows_cp_is_utf8 Indicates whether the codepage is UTF-8 compatible(0)
- sapi_windows_cp_set Set process codepage(0)
- sapi_windows_generate_ctrl_event Send a CTRL event to another process(0)
- sapi_windows_set_ctrl_handler Set or remove a CTRL event handler(0)
- sapi_windows_vt100_support Get or set VT100 support for the specified stream associated to an output buffer of a Windows console.(0)
- show_source 别名 highlight_file()(0)
- sleep 延缓执行(0)
- sys_getloadavg 获取系统的负载(load average)(0)
- time_nanosleep 延缓执行若干秒和纳秒(0)
- time_sleep_until 使脚本睡眠到指定的时间为止。(0)
- uniqid 生成一个唯一ID(0)
- unpack Unpack data from binary string(0)
- usleep 以指定的微秒数延迟执行(0)
- 字符串 函数(101)