PHP 中字符串与 byte 字节数组的互相转换

方予
方予
发布时间:2026-08-25 | 186人浏览过
原创

前言

不少 PHP 开发者在查看 Java 加密示例或接口代码时,都会先遇到一个问题:示例里明明写的是 byte[],到 PHP 里却找不到对应类型。这里可以换个思路处理,把 PHP 字符串按字节看待,再配合数组完成双向转换。

不少 PHP 开发者在查看 Java 加密示例或接口代码时,都会先遇到一个问题:示例里明明写的是 byte[],到 PHP 里却找不到对应类型。这里可以换个思路处理,把 PHP 字符串按字节看待,再配合数组完成双向转换。

下面这篇内容就围绕这个问题展开:先说明 PHP 为什么没有原生 byte[],再给出字符串与字节数组互转的实现方式。看完后,你可以快速判断这类写法适不适合当前的加密、协议或跨语言对接场景。

PHP 为什么要自己处理 byte 数组

在 Java 里,经常能看到这样的定义:

展示 PHP 中字符串与字节数组两种表示方式的专栏配图
PHP 里如何理解 byte[]PHP 没有原生 byte[],实际通常在字符串和整数数组之间切换表示。
byte[] IV = { 0, 0, 0, 0, 0, 0, 0, 0 }

这类写法在加密示例中尤其常见,比如初始化向量、密钥片段或二进制数据缓冲区。

但 PHP 是弱类型语言,并没有像 Java 那样丰富而明确的字节数组类型。实际处理时,通常有两种表示方式:

  • 用字符串保存一段原始二进制内容;
  • 用普通数组保存每个字节对应的整数值。

因此,当你需要把 Java 示例迁移到 PHP,或者要把一段字符串拆成字节值时,就需要自己补上转换逻辑。

字符串与字节数组如何互相转换

下面是一组常见的 PHP 实现,分别完成“字节数组转字符串”和“字符串转字节数组”:

展示 bytesToStr 与 strToBytes 双向转换过程的专栏配图
两个函数各自做了什么`chr()` 和 `ord()` 分别负责把整数转成字符、把字符取成字节值。
/**
 * Byte数组转字符串
 * @param  array $bytes
 * @return string
 */
function bytesToStr($bytes)
{
    $str = '';
    foreach ($bytes as $ch) {
        $str .= chr($ch);
    }
    return $str;
}

/**
 * 字符串转Byte数组
 * @param  string $string
 * @return array
 */
function strToBytes($string)
{
    $bytes = array();
    for ($i = 0; $i < strlen($string); $i++) {
        $bytes[] = ord($string[$i]);
    }
    return $bytes;
}

1. Byte 数组转字符串

bytesToStr($bytes) 的核心是遍历数组中的每一个整数,再通过 chr($ch) 把它转换成对应的单字节字符,最后拼接成字符串。

也就是说,如果数组里保存的是一串字节值,这个函数会按顺序把它们还原成 PHP 字符串。

2. 字符串转 Byte 数组

strToBytes($string) 的思路正好相反。函数使用 strlen($string) 获取字符串长度,再逐个读取字符串中的字符,并通过 ord($string[$i]) 取出它的字节值,最终放入数组中返回。

得到的结果是一个普通 PHP 数组,数组元素是对应字节的十进制整数。

这类写法适合哪些场景

这组函数的价值,主要在于把 PHP 字符串和“可见的字节序列”互相转换,方便与其他语言的示例对应起来。常见场景包括:

  • 对照 Java、C# 等语言里的 byte[] 示例代码;
  • 处理加密参数,例如 IV、密钥片段或原始密文;
  • 做协议封装、二进制数据传输或底层接口对接。

需要注意的是,这里处理的是“按字节”的转换逻辑,适合原始二进制内容或单字节视角下的数据操作。若面对的是多字节字符文本,理解时要先区分“字符”与“字节”不是同一层概念。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表