PHP中查看字节数组内容有五种方法:一、foreach循环格式化输出十六进制;二、bin2hex转字符串后分块;三、unpack解析并带索引十进制显示;四、hexdump风格三栏分块输出;五、error_log记录xHH转义序列。

如果在PHP中需要查看字节数组的实际内容,例如调试二进制数据、网络协议响应或加密输出,直接使用print_r或var_dump可能无法清晰呈现原始字节值。以下是几种准确输出字节数组内容的方法:
该方法适用于任意长度的字节数组,将每个字节以十进制或十六进制形式显式打印,便于人工核对原始值。
1、定义字节数组,例如:$bytes = [0x48, 0x65, 0x6C, 0x6C, 0x6F];
2、使用foreach遍历数组,对每个字节调用sprintf('%02X', $byte)转为大写两位十六进制字符串
立即学习“PHP免费学习笔记(深入)”;
3、用echo或printf逐个输出,字节间以空格分隔
4、可在每行限制字节数(如16字节/行)提升可读性,通过$i % 16 === 0判断换行
该方法将整个字节数组一次性转为连续十六进制字符串,适合快速验证数据完整性或与协议文档比对。
1、确保输入为字符串类型字节数组,若为整数数组需先用pack('C*', ...$bytes)转换
2、调用bin2hex($binary_string)获取全小写十六进制字符串
3、使用strtoupper()统一转为大写格式(可选)
4、使用chunk_split()按每两个字符插入空格,例如:chunk_split($hex, 2, ' ')
该方法适用于已知字节数组结构的场景,能按指定格式(如无符号字节C*)批量解包,并支持索引标注。
1、将字节数组转换为二进制字符串:若原为整数数组,使用pack('C*', ...$bytes)
2、调用unpack('C*byte', $binary_string)生成键为byte1、byte2等的关联数组
3、遍历解包结果,对每个值使用sprintf('%03d', $val)补零至三位十进制显示
4、拼接输出时加入下标标识,例如"[0]: 72 [1]: 101"
该方法模拟Linux hexdump -C输出格式,包含地址偏移、十六进制区、ASCII区三栏,适合分析较长字节数组。
1、计算总长度,按16字节每行划分区块
2、对每行起始地址使用sprintf('%08X', $offset)生成8位十六进制偏移量
3、提取当前行字节子串,用str_split($line, 1)拆分为单字节数组
4、对每个字节分别生成十六进制码(sprintf('%02X', ord($c)))和可打印ASCII字符(ctype_print($c) ? $c : '.')
5、三部分用固定宽度空格对齐,确保列对齐
该方法适用于后台调试场景,避免HTML渲染干扰,将字节数组以xHH转义序列形式记录到错误日志。
1、遍历字节数组,对每个字节生成'\x' . sprintf('%02X', $byte)格式字符串
2、使用implode('', $escaped)连接所有转义单元
3、调用error_log("Bytes: " . $escaped_string)写入PHP错误日志文件
4、关键提示:此方式不输出到页面,仅用于日志追踪,需确保log_errors开启且error_log路径可写
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号