在 PHP 中,字符串与多进制之间的转换是一个常见的需求,尤其是在处理短链接、ID 编码、数据压缩等场景时。以下是一个完整的实例代码,展示了如何实现字符串与多进制(如 base-36、base-62 等)之间的转换。
1. 实现功能
将字符串转换为多进制表示。
将多进制表示转换回原始字符串。
2. 代码实现
定义字符集
首先,定义一个字符集,用于表示目标进制的所有符号。
$charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
字符串转多进制
将字符串转换为多进制表示。
function stringToCustomBase($string, $base, $charset) { $number = 0; $length = strlen($string); // 将字符串转换为十进制数 for ($i = 0; $i < $length; $i++) { $char = $string[$i]; $value = ord($char); // 获取字符的 ASCII 值 $number = $number * 256 + $value; // 假设每个字符占 8 位(1 字节) } // 将十进制数转换为目标进制 return decimalToCustomBase($number, $base, $charset);}function decimalToCustomBase($number, $base, $charset) { if ($number == 0) { return $charset[0]; } $result = ''; while ($number > 0) { $remainder = $number % $base; $result = $charset[$remainder] . $result; $number = (int)($number / $base); } return $result;}
多进制转字符串
将多进制表示转换回原始字符串。
function customBaseToString($customBaseNumber, $base, $charset) { // 将目标进制数转换为十进制数 $decimalNumber = customBaseToDecimal($customBaseNumber, $base, $charset); // 将十进制数转换为字符串 $result = ''; while ($decimalNumber > 0) { $remainder = $decimalNumber % 256; $result = chr($remainder) . $result; $decimalNumber = (int)($decimalNumber / 256); } return $result;}function customBaseToDecimal($number, $base, $charset) { $result = 0; $length = strlen($number); for ($i = 0; $i < $length; $i++) { $char = $number[$i]; $value = strpos($charset, $char); $result = $result * $base + $value; } return $result;}
3. 完整示例
以下是一个完整的示例,展示了如何将字符串转换为 base-62 进制,并转换回原始字符串。
<?php// 定义字符集$charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';// 字符串转多进制function stringToCustomBase($string, $base, $charset) { $number = 0; $length = strlen($string); for ($i = 0; $i < $length; $i++) { $char = $string[$i]; $value = ord($char); $number = $number * 256 + $value; } return decimalToCustomBase($number, $base, $charset);}function decimalToCustomBase($number, $base, $charset) { if ($number == 0) { return $charset[0]; } $result = ''; while ($number > 0) { $remainder = $number % $base; $result = $charset[$remainder] . $result; $number = (int)($number / $base); } return $result;}// 多进制转字符串function customBaseToString($customBaseNumber, $base, $charset) { $decimalNumber = customBaseToDecimal($customBaseNumber, $base, $charset); $result = ''; while ($decimalNumber > 0) { $remainder = $decimalNumber % 256; $result = chr($remainder) . $result; $decimalNumber = (int)($decimalNumber / 256); } return $result;}function customBaseToDecimal($number, $base, $charset) { $result = 0; $length = strlen($number); for ($i = 0; $i < $length; $i++) { $char = $number[$i]; $value = strpos($charset, $char); $result = $result * $base + $value; } return $result;}// 示例$string = "Hello, World!";$base = 62;// 转换为 base-62$customBaseNumber = stringToCustomBase($string, $base, $charset);echo "String: $string -> Base-$base: $customBaseNumber\n"; // 输出:String: Hello, World! -> Base-62: 1wJfrzvdbuF// 转换回字符串$convertedBack = customBaseToString($customBaseNumber, $base, $charset);echo "Base-$base: $customBaseNumber -> String: $convertedBack\n"; // 输出:Base-62: 1wJfrzvdbuF -> String: Hello, World!?>
4. 代码说明
字符集:
$charset
定义了目标进制的所有符号。字符串转多进制:
将字符串的每个字符转换为 ASCII 值。
将所有 ASCII 值组合成一个十进制数。
将十进制数转换为目标进制。
多进制转字符串:
将目标进制数转换为十进制数。
将十进制数拆分为 ASCII 值。
将 ASCII 值转换为字符。
5. 应用场景
短链接生成:将长 URL 转换为短字符串。
ID 编码:将数据库中的数字 ID 转换为更短的字符串。
数据压缩:将大字符串转换为更短的表示形式。
6. 总结
通过自定义字符集和进制转换算法,可以实现字符串与多进制之间的灵活转换。这种方法适用于多种场景,并且可以根据需求扩展字符集和进制范围。
本文关键词: 关于 PHP 字符串 进制 转换 函数
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。