我在将二进制字符串转换为有符号整数时遇到问题
如果调用decbin('-40'),php将输出1111111111111111111111111111111111111111111111111111111111011000
但是如果你调用bindec(decbin('-40')),它将输出1.84467440737E+19(或类似的东西,这显然不是-40),因为它“将最高有效位视为另一个数量级,而不是作为符号位” - php 手册
有没有一种方法可以将二进制 64 位二进制字符串(很像 decbin 输出的字符串)转换为有符号整数?
从文档来看,你不能使用bindec
bindec() 将所有binary_string 值解释为无符号整数。这是因为 bindec() 将最高有效位视为另一个数量级,而不是符号位。
base_convert似乎完全忽略了签名。
如果您知道传入的字符串始终是 64 位二进制,并且您不在32位系统上,则编写自定义函数非常容易。
这是我快速拼凑的一个。
function bindec2($bin)
{
if (strlen($bin) == 64 && $bin[0] == '1') {
for ($i = 0; $i < 64; $i++) {
$bin[$i] = $bin[$i] == '1' ? '0' : '1';
}
return (bindec($bin) + 1) * -1;
}
return bindec($bin);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |