PHP字符串与多进制ASCII码转换函数及基础用法详解

Mason
Mason
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍了PHP环境下如何实现字符串与2、8、16进制的ASCII码互相转换,并提供完整代码实例。同时,详细列举了PHP原生支持的多进制转换内置函数及其对应的数据类型格式规范。

构建自定义多进制ASCII转换函数

在需要处理底层数据编码时,PHP原生函数可能不够灵活。我们可以编写一个统一的函数 strtoascii,根据参数将字符串转换为指定进制的ASCII码序列,或将该序列还原为字符串。

该函数主要依赖以下逻辑:

  1. 字符串转ASCII(Encode):使用 str_split 拆分字符,通过 ord() 获取ASCII数值,再利用 sprintf 按指定进制(2/8/16)格式化输出。
  2. ASCII转字符串(Decode):根据进制类型切分字符串块,分别调用 bindec、octdec 或 hexdec 转为十进制整数,最后通过 chr() 还原为字符。
<?php/** * PHP字符串与(2,8,16进制)ASCII码互转函数 * @param string $str   待处理的字符串 * @param bool $encode true为转ASCII,false为从ASCII还原 * @param string $intType '2', '8' 或 '16' * @return string 处理结果 */function strtoascii($str, $encode = true, $intType = "2"){
  if ($encode == true) {
    // 字符串 -> ASCII
    $byte_array = str_split($str);
    foreach ($byte_array as &$value) {
      $value = ord($value); // 获取ASCII码整数值
      switch ($intType) {
        case '16':
          $value = sprintf("%02x", $value); // 转为两位十六进制
          break;
        case '8':
          $value = sprintf("%03o", $value); // 转为三位八进制
          break;
        default:
          $value = sprintf("%08b", $value); // 转为八位二进制
          break;
      }
    }
    unset($value);
    return implode('', $byte_array);
  } else {
    // ASCII -> 字符串
    // 计算每段切分长度:十六进制每位2字符,八进制3字符,二进制8字符
    $chunk_size = ($intType == '16') ? 2 : (($intType == '8') ? 3 : 8);
    
    $byte_array = chunk_split($str, $chunk_size);
    $byte_array = array_filter(explode("\r\n", $byte_array));
    
    foreach ($byte_array as &$value) {
      $value = trim($value);
      if (empty($value)) continue;
      
      // 根据类型选择解析函数
      $fun_name = ($intType == '16') ? 'hexdec' : (($intType == '8') ? 'octdec' : 'bindec');
      $value = $fun_name($value); // 转为十进制
      $value = chr($value);       // 转为字符
    }
    unset($value);
    return implode('', $byte_array);
  }}
?>

PHP中的多进制表示与内置转换

了解上述算法前,需明确PHP语言本身对多进制整型字面量的定义规则。这有助于理解内置转换函数的输入格式要求。

整型字面量格式规则

  • 二进制(Binary):必须以 0b 或 0B 开头,后跟0和1。例如:0b101。
  • 八进制(Octal):必须以数字 0 开头。注意是字母O还是数字0要区分,必须是 0[1-7]。例如:017。
  • 十六进制(Hexadecimal):必须以 0x 或 0X 开头,后跟0-9及a-f/A-F。例如:0xFF。
  • 十进制(Decimal):常规整数表示,首位不为0(除非数字本身就是0)。

系统内置转换函数对照表

PHP提供了便捷的内置函数进行数值类型的进制转换,这些函数在处理非字符串形式的数字转换时效率更高:

函数名功能描述示例代码
bindec二进制字符串转换为十进制数bindec("1011") => 11
decbin十进制数转换为二进制字符串decbin(11) => "1011"
octdec八进制字符串转换为十进制数octdec("17") => 15
decoct十进制数转换为八进制字符串decoct(15) => "17"
hexdec十六进制字符串转换为十进制数hexdec("FF") => 255
dechex十进制数转换为十六进制字符串dechex(255) => "ff"

总结

在进行Web开发中的加密、协议对接或数据处理时,掌握PHP字符串与多进制ASCII的互转非常实用。对于简单的数字进制变化,优先使用 bindec、hexdec 等内置函数;对于需要保留字符特性的全量字符串转换,则建议参考上方提供的 strtoascii 封装逻辑。以上就是PHP中字符串与多进制转换函数及相关知识的详细内容,更多关于PHP编程技巧的资料请关注本站其它相关文章!

本站声明

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

Python 相关产品和应用

全部下载

专题列表