2012-08-08 66 views

回答

2

您需要使用BC Math PHP擴展(捆綁)。

先拆你的輸入字符串,以獲得高和低字節,接下來的將其轉換爲十進制數,然後通過類似這樣的BC功能做計算:

$input = "0C80000000000063"; 

$str_high = substr($input, 0, 8); 
$str_low = substr($input, 8, 8); 

$dec_high = hexdec($str_high); 
$dec_low = hexdec($str_low); 

//workaround for argument 0x100000000 
$temp = bcmul ($dec_high, 0xffffffff); 
$temp2 = bcadd ($temp, $dec_high); 

$result = bcadd ($temp2, $dec_low); 

echo $result; 

/* 
900719925474099299 
*/ 
1

您是否看到過在php.net上的hexdec幫助頁面的第一條評論?

當給出大量數字時,十六進制功能自動將該值轉換爲科學記數法的值爲 。因此,「aa1233123124121241」作爲 的十六進制值將被轉換爲「3.13725790445E + 21」。如果你是 轉換表示散列值的十六進制值(md5或 sha),那麼你需要該表示的每一位使其 有用。通過使用number_format函數,您可以完美地完成這項工作。例如:

<?php 

      // Author: [email protected] 

     // Example Hexadecimal 
     // --------------------------------------------- 

    $hexadecimal_string = "1234567890abcdef1234567890abcdef"; 

     // Converted to Decimal 
     // --------------------------------------------- 

    $decimal_result = hexdec($hexadecimal_string); 

     // Print Pre-Formatted Results 
     // --------------------------------------------- 

    print($decimal_result); 

      // Output Here: "2.41978572002E+37" 
      // ..................................... 

     // Format Results to View Whole All Digits in Integer 
     // --------------------------------------------- 

      // (Note: All fractional value of the 
      //   Hexadecimal variable are ignored 
      //   in the conversion.) 

    $current_hashing_algorithm_decimal_result = number_format($decimal_result, 0, '', ''); 

     // Print Formatted Results 
     // --------------------------------------------- 

    print($current_hashing_algorithm_decimal_result); 

      // Output Here: "24197857200151253041252346215207534592" 
      // ..................................... 

?> 
+1

這是行不通的。它只是擴展它。 0c80000000000062!= 900719925474099328 – 2012-08-08 15:44:16

+0

嗯,由一個? – favoretti 2012-08-08 15:46:56

+0

這是錯誤的,number_format將使用舍入數字。 0x1234567890abcdef1234567890abcdef == 24197857200151252728969465429440056815(base 10) – 2014-02-20 15:50:13

相關問題