[PHP] 16進数表現の罠
PHP5までは特に問題なかったところ、PHP7に移行して(今更)発覚した問題。
huh.php
<?php
var_dump(dechex(0xfedcba9876543210));
string(16) "fedcba9876543000"
…はぅ?
omg.php
<?php
var_dump(0xfedcba9876543210);
float(1.8364758544493E+19)
まさかのfloat。
max.php
<?php
var_dump(0x7fffffffffffffff);
int(9223372036854775807)
正数なら問題ないらしい不思議。
shift.php
<?php
var_dump(1<<63);
int(-9223372036854775808)
シフト演算で突き押し作戦。
ok.php
<?php
var_dump(dechex(0xf<<60|0xedcba9876543210));
string(16) "fedcba9876543210"
強引に解決。
PHP8では…
huh.php
<?php
var_dump(dechex(0xfedcba9876543210));
Fatal error: Uncaught TypeError: dechex(): Argument #1 ($num) must be of type int, float given
叱られた…
ok.php
<?php
var_dump(dechex(0xf<<60|0xedcba9876543210));
string(16) "fedcba9876543210"
原因は同じなので、同じく強引に解決可。
Author And Source
この問題について([PHP] 16進数表現の罠), 我々は、より多くの情報をここで見つけました https://qiita.com/Yggdrasil-Leaves/items/5876c7d6b2e96e90eeb4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .