PHP字符串与多进制ASCII码转换函数及基础用法详解
本文介绍了PHP环境下如何实现字符串与2、8、16进制的ASCII码互相转换,并提供完整代码实例。同时,详细列举了PHP原生支持的多进制转换内置函数及其对应的数据类型格式规范。
构建自定义多进制ASCII转换函数
在需要处理底层数据编码时,PHP原生函数可能不够灵活。我们可以编写一个统一的函数 strtoascii,根据参数将字符串转换为指定进制的ASCII码序列,或将该序列还原为字符串。
该函数主要依赖以下逻辑:
- 字符串转ASCII(Encode):使用
str_split拆分字符,通过ord()获取ASCII数值,再利用sprintf按指定进制(2/8/16)格式化输出。 - 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编程技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









