PHP中十进制 和十六进制的转换问题

WBOY
リリース: 2016-06-06 20:44:50
オリジナル
1684 人が閲覧しました

<code>$s = '9C216AFB868C';
$sb=hexdec($s) ;

var_dump( $sb );//1.716673427227E+14

echo '<br>';

var_dump( dechex($sb) );//6afb868c
</code>
ログイン後にコピー
ログイン後にコピー

十六进制$s 转换成十进制 ,再转回十六进制就出问题。

dechex() 转换大小是有限制的。
------------补充---------------------------------------
$s = '9C216AFB868C';
$s 加 1 php中怎么实现了?(十六进制计算)

回复内容:

<code>$s = '9C216AFB868C';
$sb=hexdec($s) ;

var_dump( $sb );//1.716673427227E+14

echo '<br>';

var_dump( dechex($sb) );//6afb868c
</code>
ログイン後にコピー
ログイン後にコピー

十六进制$s 转换成十进制 ,再转回十六进制就出问题。

dechex() 转换大小是有限制的。
------------补充---------------------------------------
$s = '9C216AFB868C';
$s 加 1 php中怎么实现了?(十六进制计算)

可以对比一下,最后的输出结果 6afb868c 正好是 9C216AFB868C 的后面 8 位(忽略大小写)。

在 hexdec 手册中,:

PHP 4.1.0 开始,该函数可以处理 integer 大数字,这种情况下,它会返回 float 类型。

在 dechex 中:

所能转换的最大数值为十进制的 PHP_INT_MAX * 2 + 1 (或 -1):在 32 位平台上是十进制的 4294967295,其 dechex() 的结果为 ffffffff


第一次的结果 1.716673427227E+14 写成普通格式 171667342722700,这个结果没有任何问题。

9c216afb868c 转十进制: http://www.wolframalpha.com/input/?i=convert++9c216afb868c+to+base+10

这个数再转换回去是 9c216afb868c

171667342722700 转十六进制: http://www.wolframalpha.com/input/?i=171667342722700+to+hex

首先如果你不是32位的计算机的话,这个位数远没有达到PHP所能处理的最大值,PHP里的最大值可以用常量PHP_INT_MAX查到,在64位计算机下它的值是

<code class="lang-php">echo PHP_INT_MAX;    // 9223372036854775807
echo dechex(PHP_INT_MAX); // 7fffffffffffffff
</code>
ログイン後にコピー

况且你都能成功从16进制转过来,是不可能因为大小问题转不回去的。问题就出在你转出来的这个10进制值上,它是

<code class="lang-php">1.716673427227E+14
</code>
ログイン後にコピー

这是一个用科学计数法表示的字符串,而dechex函数是无法识别这个字符串的,php中只会自动将纯数字组成的字符串转换成相应的整形或者浮点

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!