Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中64位整数的二进制值的base64编码无效_Php_Go_Encoding_Base64 - Fatal编程技术网

PHP中64位整数的二进制值的base64编码无效

PHP中64位整数的二进制值的base64编码无效,php,go,encoding,base64,Php,Go,Encoding,Base64,如何在PHP上对64位整数的二进制字符串使用base64编码 此代码未按预期工作 <?PHP $t=11545152599186258990; $byte_array_t = pack('P',$t); echo base64_encode($byte_array_t); //not correct result - it should be: LrwswB6fOKA= echo ' '; $t=11; $byte_array_t = pack('P',$t); echo base64_e

如何在PHP上对64位整数的二进制字符串使用base64编码

此代码未按预期工作

<?PHP
$t=11545152599186258990;
$byte_array_t = pack('P',$t);
echo base64_encode($byte_array_t); //not correct result - it should be: LrwswB6fOKA=
echo '
';
$t=11;
$byte_array_t = pack('P',$t);
echo base64_encode($byte_array_t); //correct

更新

尝试使用而不是
pack
。请确保将整数作为字符串传递给,否则它将溢出:

$t = gmp_init("11545152599186258990");
$byte_array_t = gmp_export($t, 8);
echo base64_encode($byte_array_t); // LrwswB6fOKA=

我为您建议一个棘手的解决方案,将您的号码分成两个32位并打包

$value = 11545152599186258990;
$highMap = 0xffffffff00000000; 
$lowMap = 0x00000000ffffffff; 
$higher = ($value & $highMap) >>32; 
$lower = $value & $lowMap; 
$packed = pack('NN', $higher, $lower); 

list($higher, $lower) = array_values(unpack('N2', $packed)); 
$originalValue = $higher << 32 | $lower; 
$value=11545152599186258990;
$highMap=0xFFFFFF00000000;
$lowMap=0x00000000ffffffff;
$higher=($value和$highMap)>>32;
$lower=$value&$lowMap;
$packed=pack('NN',$higher,$lower);
列表($higher,$lower)=数组_值(解包($N2',$packed));

$originalValue=$higher首先感谢JimB的正确评论和评论中关于您的问题

有没有办法在PHP中获取二进制值11545152599186258990

答案是:

PHP在内部将整数值存储为机器相关大小的有符号值(C类型long)。整数文本和生成整数类型边界之外的数字的操作将存储为浮点。将这些浮点数打包为整数时,首先将它们转换为整数类型。这可能会也可能不会产生所需的字节模式

64位机器上的输入范围为

9223372036854775807(最大有符号整数)

您可以将其与给定的数字进行比较

这里有一个非常重要的话题,最后也是这里


但仍在最大有符号整数的限制范围内。

PHP没有无符号整数类型,因此
11545152599186258990
溢出整数,并静默转换为
浮点(1.1545152599186E+19)
。有没有办法在PHP中获取二进制值11545152599186258990?首先是如何获取数字的?您可以将其打包为2个32位的数字,但在代码中的其他位置,它仍可能被转换为浮点。我一点也不懂PHP,但可能有一些大的整数库或其他可以使用的东西。
$value = 11545152599186258990;
$highMap = 0xffffffff00000000; 
$lowMap = 0x00000000ffffffff; 
$higher = ($value & $highMap) >>32; 
$lower = $value & $lowMap; 
$packed = pack('NN', $higher, $lower); 

list($higher, $lower) = array_values(unpack('N2', $packed)); 
$originalValue = $higher << 32 | $lower;