php对应 c int16,PHP中十进制 和十六进制的转换问题
$s = '9C216AFB868C';
$sb=hexdec($s) ;
var_dump( $sb );//1.716673427227E+14
echo '
';
var_dump( dechex($sb) );//6afb868c
十六進制$s 轉換成十進制 ,再轉回十六進制就出問題。
查 dechex() 轉換大小是有限制的。
------------補充---------------------------------------
$s = '9C216AFB868C';
$s 加 1 php中怎么實現了?(十六進制計算)
回復內容:
$s = '9C216AFB868C';
$sb=hexdec($s) ;
var_dump( $sb );//1.716673427227E+14
echo '
';
var_dump( dechex($sb) );//6afb868c
十六進制$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位計算機下它的值是
echo PHP_INT_MAX; // 9223372036854775807
echo dechex(PHP_INT_MAX); // 7fffffffffffffff
況且你都能成功從16進制轉過來,是不可能因為大小問題轉不回去的。問題就出在你轉出來的這個10進制值上,它是
1.716673427227E+14
這是一個用科學計數法表示的字符串,而dechex函數是無法識別這個字符串的,php中只會自動將純數字組成的字符串轉換成相應的整形或者浮點。
相關標簽:php
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php对应 c int16,PHP中十进制 和十六进制的转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样更改个性签名
- 下一篇: 分开了手是哪首歌啊?