不少 PHP 开发者在查看 Java 加密示例或接口代码时,都会先遇到一个问题:示例里明明写的是 byte[],到 PHP 里却找不到对应类型。这里可以换个思路处理,把 PHP 字符串按字节看待,再配合数组完成双向转换。
下面这篇内容就围绕这个问题展开:先说明 PHP 为什么没有原生 byte[],再给出字符串与字节数组互转的实现方式。看完后,你可以快速判断这类写法适不适合当前的加密、协议或跨语言对接场景。
PHP 为什么要自己处理 byte 数组
在 Java 里,经常能看到这样的定义:

byte[] IV = { 0, 0, 0, 0, 0, 0, 0, 0 }这类写法在加密示例中尤其常见,比如初始化向量、密钥片段或二进制数据缓冲区。
但 PHP 是弱类型语言,并没有像 Java 那样丰富而明确的字节数组类型。实际处理时,通常有两种表示方式:
- 用字符串保存一段原始二进制内容;
- 用普通数组保存每个字节对应的整数值。
因此,当你需要把 Java 示例迁移到 PHP,或者要把一段字符串拆成字节值时,就需要自己补上转换逻辑。
字符串与字节数组如何互相转换
下面是一组常见的 PHP 实现,分别完成“字节数组转字符串”和“字符串转字节数组”:

/**
* 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、密钥片段或原始密文;
- 做协议封装、二进制数据传输或底层接口对接。
需要注意的是,这里处理的是“按字节”的转换逻辑,适合原始二进制内容或单字节视角下的数据操作。若面对的是多字节字符文本,理解时要先区分“字符”与“字节”不是同一层概念。













