1

我正在寻找一种将 8 字符字符串转换为 32 位有符号整数的简洁方法。

请参阅MSDN上的 Convert.ToInt32 方法参考。

这是 VB 中当前的 .NET 代码:

Convert.ToInt32("c0f672d4", 16)
// returns -1057590572

如何使用 PHP 5.3+ 为 32 位和 64 位获得相同的返回值?

我想它可能需要组合打包/解包函数和按位运算符,但还没有找到正确的组合。

更新:2013-07-10 以下适用于 32 位系统:

$str = 'c0f672d4';
$int = intval( substr( $str, 0, 4 ), 16 ); // read high 16 bit word
$int <<= 16; // shift hi word correct position
$int |= intval( substr( $str, 4, 4 ), 16 ); //  read low 16 bit word
echo $int;
// returns -1057590572

上面的问题是它不适用于 64 位系统。相反,我3237347344使用上面的 PHP 代码获取值。

使用可移植到 32 位和 64 位的 PHP 获得一致整数的任何想法?

4

2 回答 2

3

这目前在 32 位和 64 位系统 YMMV 上为我工作。确保你测试,测试,测试!

信用:https ://stackoverflow.com/a/2123458/

function intval_32bits($value)
{
    $value = ($value & 0xFFFFFFFF);
    if ($value & 0x80000000) $value = -((~$value & 0xFFFFFFFF) + 1);
    return $value;
}
于 2015-06-15T14:46:05.203 回答
1

您需要将 64 位二进制补码 +ve val 转换为 32 位二进制补码 -ve 值

function to_int32($value) {

    $intval = hexdec($value);

    // If 64 bit
    if (PHP_INT_SIZE === 8) {
        return ($intval - 0x100000000);
    }

    // 32 bit
    return $intval;
}
于 2013-07-10T17:01:28.413 回答