首页 > 解决方案 > PHP - 将十六进制值转换为版本字符串

问题描述

我正在使用一个未记录的 API,它提供版本号作为hexdec值。我希望将其转换为版本控制字符串。

例子

API 提供以下价值117473280:( hexdec('7008000'))

这应该转换为字符串:7.00

我做了以下功能来做到这一点:

function getFirmwareFromDechex($dechex) {
    if(!empty($dechex) || $dechex !== '0') {
        $dechex = dechex($dechex);
        $dechex = substr($dechex, 0, 3);
        $dechex = number_format($dechex / 100, 2);
            
        return $dechex;
    }
    
    return false;
}

echo getFirmwareFromDechex('117473280');

这有效。但是,当它必须转换 10.00 版本时,它会将其转换为 1.00。

如何使该功能与更高版本号(例如 10.00)兼容?

更新

在查看了第三方如何在他们的网站上显示这些版本之后,似乎我需要在左边的数字上填充一个 0。

标签: phphex

解决方案


我认为十六进制字符串应该是 8 个字节长,所以用 0 (str_pad()with STR_PAD_LEFT)填充开头,然后取前 4 个字符......

function getFirmwareFromDechex($dechex) {
    if(!empty($dechex) || $dechex !== '0') {
        $dechex = str_pad(dechex($dechex), 8, 0, STR_PAD_LEFT);
        $dechex = substr($dechex, 0, 4);
        $dechex = number_format($dechex / 100, 2);

        return $dechex;
    }

    return false;
}

推荐阅读