php 兼容正数、负数 16进制转10进制

本文介绍了一个PHP函数hexToDecimal,用于处理16进制字符串(包括正数和负数)到10进制的转换,通过检查符号位并使用补码转换规则。函数适用于32位整数,但需根据实际位数调整掩码值。
摘要由CSDN通过智能技术生成

负数在16进制中通常表示为2的补码形式。下面是一个简单的函数示例,它处理正数和负数的16进制到10进制的转换:

function hexToDecimal($hexString) {
    // 移除可能的0x前缀
    $hexString = ltrim($hexString, '0x');
    // 转换为无符号的10进制数
    $unsignedDecimal = hexdec($hexString);
    // 检查是否表示负数(最高位为1)
    if (($unsignedDecimal & 0x80000000) !== 0) {
        // 如果是负数,转换为补码形式
        $signedDecimal = -((~$unsignedDecimal + 1) & 0xFFFFFFFF);
    } else {
        // 如果是正数,直接使用无符号的10进制数
        $signedDecimal = $unsignedDecimal;
    }
    return $signedDecimal;
}

// 示例使用
$positiveHex = '1A';  // 正数示例
$negativeHex = 'FFFFFEE1';  // 负数示例
echo "Positive Decimal: " . hexToDecimal($positiveHex) . "\n";
echo "Negative Decimal: " . hexToDecimal($negativeHex) . "\n";

在上面的代码中,我们首先去掉了可能的0x前缀,然后使用hexdec函数将16进制字符串转换为无符号的10进制数。接着,我们检查最高位(符号位)来确定数字是正数还是负数。如果最高位是1,我们将其视为负数,并使用补码转换公式将其转换为正确的负数10进制表示。如果最高位是0,我们直接返回无符号的10进制数,因为它是一个正数。

请注意,上面的函数假设输入的16进制字符串表示的是32位整数。如果你处理的是不同位数的整数,你需要调整掩码值(0xFFFFFFFF)以匹配你的位数。例如,对于16位整数,你应该使用0xFFFF作为掩码。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值