2016-12-09 5 views
3

PHP 5.5ではpack('J', $val)が必要ですが、 'J'は5.6以降でのみサポートされています。PHPのパック( 'J')をシミュレートする<5.6

どうすればphp-5.5でシミュレーションできますか? 64ビットすべてをパックする必要はありません。

私の試みは、(Win7の64ビットに)正しいとは思われない:

pack('J', $val) === pack('N', 0) . pack('N', $val) 
+0

*「64ビットすべてをパックする必要は本当にありません」*とは、実際には32ビットの値をパックしているということですか? – Narf

+0

また、これを実行しようとしている価値は何ですか?それは正の整数のために働く... – Narf

+0

@narfはい申し訳ありませんが、それはそのように動作するようです。エラーはコードの別の場所にありました。しかし、btw(どのように)すべての64ビットを保存することは可能ですか? – toshniba

答えて

0

あり、これを行うには、よりスマートな方法は、おそらくですが、この作品:

// base_convert() will treat your value as a string here, 
// converting it from decimal to hexadecimal 
$hexStringValue = base_convert($your64bitInteger, 10, 16); 

// Pad with zeros to the left, until pack()'s output length is matched 
$hexStringValue = str_pad($hexStringValue, 16, '0', STR_PAD_LEFT); 

// Convert to binary 
$packed64bitInteger = hex2bin($hexStringValue); 

私がしなければなりませんただし、PHP 5.5 reached EOL in July 2016となり、とにかくバージョン5.6以上にアップグレードする必要があります。

+0

。 – Narf

関連する問題