1

8 文字の文字列を 32 ビットの符号付き整数に変換する簡潔な方法を探しています。

MSDNの Convert.ToInt32 メソッドのリファレンスを参照してください。

これは、VB の現在の .NET コードです。

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

32 ビットと 64 ビットの両方で PHP 5.3+ を使用して同じ戻り値を取得するにはどうすればよいですか?

pack / unpack関数とビット単位の演算子の組み合わせが必要になる可能性があると思いますが、まだ正しい組み合わせが見つかりません。

更新: 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 ビットの 2 の補数 +ve val から 32 ビットの 2 の補数 -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 に答える