PHP - 如何将 base_convert() 转换为基数 62

2023-11-25

我需要一个base_convert()函数的工作范围从基数 2 到基数 62,但我缺少需要使用的数学,我知道由于 PHP 的限制,我需要使用 bcmath,这很好。

功能像这些将数字与以 10 为基数的数字转换为另一个以 62 为基数的数字,但我想实现与base_convert(),例如:只有一个函数可以在任意基数之间进行转换。

我找到了一个似乎可以执行此操作的函数,但它给我的感觉是有一些冗余且缓慢的代码,如果我懂德语,我想稍微调整一下它,而我不懂德语。 =(

这是该函数的更易读的版本:

function bc_base_convert($value, $quellformat, $zielformat)
{
    $vorrat = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    if (min($quellformat, $zielformat) < 2)
    {
        trigger_error('Bad Format min: 2', E_USER_ERROR);
    }

    if (max($quellformat, $zielformat) > strlen($vorrat))
    {
        trigger_error('Bad Format max: ' . strlen($vorrat), E_USER_ERROR);
    }

    $dezi = '0';
    $level = 0;
    $result = '';
    $value = trim(strval($value), "\r\n\t +");
    $vorzeichen = '-' === $value{0} ? '-' : '';
    $value = ltrim($value, "-0");
    $len = strlen($value);

    for ($i = 0; $i < $len; $i++)
    {
        $wert = strpos($vorrat, $value{$len - 1 - $i});

        if (FALSE === $wert)
        {
            trigger_error('Bad Char in input 1', E_USER_ERROR);
        }

        if ($wert >= $quellformat)
        {
            trigger_error('Bad Char in input 2', E_USER_ERROR);
        }

        $dezi = bcadd($dezi, bcmul(bcpow($quellformat, $i), $wert));
    }

    if (10 == $zielformat)
    {
        return $vorzeichen . $dezi; // abkürzung
    }

    while (1 !== bccomp(bcpow($zielformat, $level++), $dezi));

    for ($i = $level - 2; $i >= 0; $i--)
    {
        $factor = bcpow($zielformat, $i);
        $zahl = bcdiv($dezi, $factor, 0);
        $dezi = bcmod($dezi, $factor);
        $result .= $vorrat{$zahl};
    }

    $result = empty($result) ? '0' : $result;

    return $vorzeichen . $result;
}

谁能解释一下上面的函数,或者给我一些关于任意碱基之间直接转换过程的说明?


从 PHP 5.3.2 开始,bc_math 和 gmp 现在都支持高达 62 的基数,因此您可以执行以下操作:

echo gmp_strval(gmp_init($mynumber, $srcbase), $destbase);

或 bc_math 等效项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP - 如何将 base_convert() 转换为基数 62 的相关文章

  • PHP使用正则表达式查找字符串

    我已经阅读了多个有关正则表达式的教程 但它只是不会留在我的脑海中 我永远无法让我的模式发挥作用 希望有人能帮忙 我有一个 php 变量 content 我需要在其中找到如下所示的特定模式 图库 名称 文件夹 我想搜索 starting wi
  • 如何在 PHP 中使用 foreach 循环仅回显一次特定的多个相同记录?

    我在 PHP 中使用 foreach 循环得到这些输出 现在 foreach 内部的输出如下所示 PHP代码 table thead tr th ACCOUNT NUMBER th th CATEGORY th th AMOUNT th t
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 在 PHP 中设置通知的 FCM 通道 ID

    我正在尝试使用 PHP 向 Android 设备发送 FCM 通知 我的代码适用于 Android O 之前的设备 在Android O中 我们还需要在请求中设置通道ID来接收通知 我不知道该怎么做 我已在应用程序中完成了必要的设置 并使用
  • PHPExcel输出乱码

    我正在尝试 PHPExcel 附带的简单示例 01simple xls 我得到乱码输出 它 LibreOffice 想要导入文件 它认为字符集是西欧 DOS OS2 861 icelandic 输出是这样的
  • DOMDocument PHP 内存泄漏

    在 MAC 上的 MAMP 下运行 PHP 5 3 6 内存使用量每调用 x 次 3 到 8 次 就会增加 直到脚本因内存耗尽而终止 我该如何解决 libxml use internal errors true while true dom
  • 是否需要使用fetch_object或fetch_array?

    我最近发现我可以打印数据库中的结果而不使用mysqli fetch object功能 例如 假设我们有一个简单的 sql select 语句 可以使用如下所示的语句来执行 conn mysqli connect localhost root
  • php字符串是值类型吗?

    为什么php的string是值类型 每次将参数传递给函数时 每次进行赋值时 每次连接都会导致字符串被复制时 它都会被复制到各处 我的 NET 经验告诉我 它似乎效率低下 迫使我几乎在任何地方都使用引用 考虑以下替代方案 替代方案1 This
  • magento 删除管理菜单项

    在magento中 是否可以删除管理中的菜单项 我有一个新模块 并将评论和评级拉到一个新部分 我不反对将它们也留在目录部分 但如果可能 并且干净 我想将其从那里删除 将下一行添加到扩展 config xml 文件
  • PHP 强制 Apache 错误

    感谢这个论坛 我了解到 PHP header 函数实际上并不将 header 发送到 Apache 服务器 而只发送到客户端 我想要做的是生成错误 500 并让 Apache 显示其相应的页面 有办法强制吗 提前致谢 还有 Allez le
  • 具有非常大的数字的除法

    我只是想知道在处理大数字时有哪些不同的除法策略 我所说的大数字是指 50 位数字 例如 9237639100273856744937827364095876289200667937278 82637448262718273966299344
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 禁用选择标签内的一个选项值在 IE6Ha 中不起作用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个包含 4 个值 a b c d 的选择框 我只想禁用下拉列表中的 c 我使用了禁用属性 它在所有浏览器中都有效 但在 IE6
  • Laravel 5.4 密码重置

    我有一个 Laravel 5 4 应用程序 我的管理区域中有一个视图 允许我查看所有用户 我想创建一个功能 允许我单击后端的按钮 自动发送默认 Laravel 密码重置功能的过程 在我看来 我有以下几点 table class table
  • Facebook 应用程序 - 此 URL 的域不包含在应用程序的域中。为什么?

    尝试使用 Facebook 应用程序登录时 我收到以下错误 无法加载 URL 此 URL 的域不包含在应用程序的域中 为了能够加载此 URL 请将应用程序的所有域和子域添加到应用程序设置中的 应用程序域 字段 如下图所示 URL http
  • 如何将从 MySQL 获取的数据以 JSON 形式返回到 php 文件中?

    我必须将从 MySQL 表中获取的数据作为 JSON 返回到 php 文件中 这是我连接到 mysql 并从中获取数据的代码 现在我怎么能将它作为 JSON 返回呢
  • 为什么 symfony DOMCrawler 对象无法在依赖的 phpunit 测试之间正确传递?

    我有一个适用于我的 symfony 应用程序的 phpunit 测试套件 在该测试文件中 我在不同的测试之间有一些依赖关系 并在依赖关系之间传递一个 DOMCrawler 对象 这样我就不必每次都导航到它 但是 在采用我所做的方法时 您似乎
  • 如果在 Woocommerce 中应用了任何优惠券代码,请删除一些支付网关

    我开始从事小型 Woocommerce 项目 我有 3 个支付网关进入这家商店 Paypal 信用卡和直接银行转账 我想要的是 如果使用优惠券代码 我想从可用的支付网关中禁用 或删除 Paypal 和信用卡 并仅保留 直接银行转账 作为可用
  • php 中接口的用途是什么?

    如果我在 PHP 中定义一个接口 以及一个创建该接口实例的工厂类 有什么方法可以强制客户端代码仅使用该接口而不使用底层具体类 根据我的理解 客户也可以实际使用底层类中的任何公共函数 字段 这是一个例子
  • 严格标准:资源 ID#73 用作偏移量,转换为整数

    我使用这个 PHP 函数获取 MySql 结果 function fetcharray query id if query id query id this gt query res if query id this gt q array

随机推荐

  • Firebase 存储覆盖文件

    我的程序中有一个小错误 我的应用程序中有 firebase 存储 我想让用户将图像上传到存储 问题是当用户上传图像然后尝试上传另一张图像时 该程序会覆盖之前上传的图像 我想要的是当用户想要上传另一张图像时避免 覆盖 并将两个图像保存在不同的
  • 从 NSArray 获取字符串值

    我有一个NSArrayController当我得到selectedObjects并创建一个 NSString 其值为valueForKey Name 它返回 This is still a work in progress 我想要的只是其中
  • 如何在不重新组合的情况下获得精确的尺寸?

    我需要可组合项的大小来绘制动态线条 但我不想通过以下方式获取大小 var size by remember mutableStateOf IntSize Zero Modifier onSizeChanged size it or Modi
  • Android锁屏API?

    我见过两个可以自定义锁屏的应用程序 Widget locker slidescreen 我们真的有一个 API 可以让我们自定义锁屏吗 如果不是的话 有什么技巧呢 请参阅 mylockforandroid 安卓版的我的锁 它是 GPL 的
  • 将文件分块发送到 HttpHandler

    我正在尝试将文件分块发送到 HttpHandler 但是当我在 HttpContext 中收到请求时 inputStream 为空 所以 a 发送时我不确定我的 HttpWebRequest 是否有效 b 在接收时我不确定如何检索 Http
  • 当前目录中包含多个 jar 文件的 javac 类路径选项导致错误

    环境 Windows 7 Java 6 尝试使用 cp 选项编译 java 文件 该文件使用当前目录中的单个 jar 文件以及当前目录中的一些其他 jar 文件 javac cp jar MyFile java 不起作用 javac cp
  • 未经授权的请求后抑制 NTLM 对话框

    在最近的一个共享点项目中 我实现了一个身份验证 Web 部件 它应该取代 NTLM 身份验证对话框 只要用户提供有效的凭据 它就可以正常工作 每当用户提供无效凭据时 Internet Explorer 中就会弹出 NTLM 对话框 我的 J
  • 获取文件的创建日期/时间

    这似乎是一个非常简单的问题 但我无法在网上找到明确的答案 如何通过 Java 的文件管理器获取文件创建的日期 时间 除了文件名之外 我还能获得有关文件 属性 的哪些信息 我不确定如何使用 Java 6 及更低版本获得它 使用 Java 7
  • 零除错误 (Python)

    我收到一些图像的零除错误 尽管其中很多都工作得很好 这是代码 image skimage io imread test png False image gray skimage io imread test png True blurred
  • 为什么模板只能在头文件中实现?

    引用自C 标准库 教程和手册 目前使用模板的唯一可移植方法是通过使用内联函数在头文件中实现它们 为什么是这样 澄清 头文件不是only便携式解决方案 但它们是最方便的便携式解决方案 警告 它是not有必要将实现放入头文件中 请参阅本答案末尾
  • 无法在 LazyColumn 中使用屏幕底部的 TextField

    我有这个代码 setContent val items mutableListOf
  • 迁移到 AndroidX

    好吧 我开始从一个一年前的项目迁移到 AndroidX 此后一直没有动过 但我在资源和 gradle 构建方面遇到了问题 我完全迷失了新的命名空间 我更改了其中一些命名空间 我升级了 AndroidStudio 告诉我的所有内容 但仍然无法
  • sdkman安装的`sdk`命令在哪里

    我刚刚安装sdkman用于在我的机器 MacOS 上安装 grails 当我跑步时which sdk命令我没有得到任何输出 但是当我运行sdk help命令 shell 能够解析它并给出正确的输出 我检查了 PATH 环境变量中提到的所有目
  • React Native - 如何从 ScrollView 获取视图的 Y 偏移值?

    我正在尝试获取视图的滚动位置 但价值为页面的 Y 偏移量这与视图的位置无关 滚动视图层次结构
  • 在 Android 模拟器中切换到横向模式

    这可能是一个很容易回答的问题 但在搜索文档和谷歌几个小时后我自己找不到解决方案 我将 Android 应用程序的方向设置为landscape in the AndroidManifest xml file android screenOri
  • 第一次触发事件时,按键事件不会记录输入值

    第一次keypress事件触发时 即使输入有值 它也会记录一个空输入值 第二次它记录该值 但与输入值相比晚了一次击键 您可以在下一个示例中检查此行为 document addEventListener DOMContentLoaded gt
  • 在 64 位 Linux 机器上用 gcc 生成“长”4 个字节

    我正在致力于将应用程序移植到 Linux 平台上的 64 位 该应用程序目前支持 Linux Windows Mac 32 位和 Windows 64 位 我们经常遇到的问题之一是使用 long 代替 int 反之亦然 到目前为止这还不是问
  • WPF在WPF窗口中打开exe程序

    不确定这是否可行 但有没有办法在 WPF 窗口的容器中打开另一个程序 例如记事本 类似于使用 webbrowser 控件打开网页 基本上我想打开记事本或其他 exe 但使用 xaml c 代码将其限制在 WPF 窗口容器内 不确定是否可能
  • 使用 ActionBar 选项卡在 onCreateView 中获取 Google 地图片段

    我正在尝试在 ActionBar 中使用选项卡时检索 Google 地图片段 当我加载选项卡式页面时 地图加载正常 但我想获取地图对象 以便可以将其居中 添加标记等 有没有办法做到这一点 如果有的话 有人会好心告诉我怎么做吗 这是我的标签页
  • PHP - 如何将 base_convert() 转换为基数 62

    我需要一个base convert 函数的工作范围从基数 2 到基数 62 但我缺少需要使用的数学 我知道由于 PHP 的限制 我需要使用 bcmath 这很好 功能像这些将数字与以 10 为基数的数字转换为另一个以 62 为基数的数字 但