【问题标题】:Hexadecimal String Incrementation十六进制字符串增量
【发布时间】:2016-06-12 15:05:45
【问题描述】:

这可能是一个简单的两行代码,但我在过去的两个小时里一直在寻找和尝试所有解决方案,但都是徒劳的。

使用 PHP 5.6,我想增加从数据库中获取的字符串的值。该字符串包含一个十六进制数字,例如 ffffffff000000000001586f 我想增加它以获得 ffffffff0000000000015870

我尝试使用 hexdec 和 dechex 、 String2hex 转换我的字符串...但我总是得到错误的结果

【问题讨论】:

  • 谢谢,但不是重复的,因为他想将他的十六进制转换为十进制,我的情况不同我想获得字符串的十六进制表示,不过我会尝试一些 cmets 的技巧。
  • 问题是一样的——你不能使用裸hexdec,因为它是大数字。
  • 这就是重点,我的问题是我无法将那么大的十进制数恢复为十六进制表示
  • 试试第一条评论中的那些功能——php.net/manual/en/ref.bc.php#99130

标签: php type-conversion


【解决方案1】:

使用来自http://php.net/manual/en/ref.bc.php#99130的函数

<?php

function bchexdec($hex) {
    if(strlen($hex) == 1) {
        return hexdec($hex);
    } else {
        $remain = substr($hex, 0, -1);
        $last = substr($hex, -1);
        return bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
    }
}

function bcdechex($dec) {
    $last = bcmod($dec, 16);
    $remain = bcdiv(bcsub($dec, $last), 16);

    if($remain == 0) {
        return dechex($last);
    } else {
        return bcdechex($remain).dechex($last);
    }
}

echo bcdechex(bcadd(bchexdec('ffffffff000000000001586f'), 1));

https://3v4l.org/fXneg

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2014-03-07
    • 2019-07-27
    • 2020-04-18
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多