PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

关于PHP中字符串与多进制转换函数的实例代码

管理员 2025-02-18
工作总结
63

在 PHP 中,字符串与多进制之间的转换是一个常见的需求,尤其是在处理短链接、ID 编码、数据压缩等场景时。以下是一个完整的实例代码,展示了如何实现字符串与多进制(如 base-36、base-62 等)之间的转换。


1. 实现功能

  • 将字符串转换为多进制表示。

  • 将多进制表示转换回原始字符串。


2. 代码实现

定义字符集

首先,定义一个字符集,用于表示目标进制的所有符号。

php
复制
$charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

字符串转多进制

将字符串转换为多进制表示。

php
复制
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;}

多进制转字符串

将多进制表示转换回原始字符串。

php
复制
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
复制
<?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. 代码说明

  1. 字符集$charset 定义了目标进制的所有符号。

  2. 字符串转多进制

    • 将字符串的每个字符转换为 ASCII 值。

    • 将所有 ASCII 值组合成一个十进制数。

    • 将十进制数转换为目标进制。

  3. 多进制转字符串

    • 将目标进制数转换为十进制数。

    • 将十进制数拆分为 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修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部