php 二进制 字符,PHP:签名二进制字符串

这篇博客讨论了在PHP中使用decbin和bindec函数将二进制字符串转换为有符号整数时遇到的问题。由于bindec函数将最高位视为另一个数量级而非符号位,导致转换结果错误。作者提供了一个自定义函数bindec2作为解决方案,该函数能够正确处理64位二进制字符串并考虑符号位。
摘要由CSDN通过智能技术生成

我在将二进制字符串转换为有符号整数时遇到问题

如果你调用decbin(‘ – 40’),php将输出1111111111111111111111111111111111111111111111111111111111011000

但是如果你调用bindec(decbin(‘ – 40’)),它将输出1.84467440737E 19(或类似的东西,显然不是-40)因为它“将最重要的位视为另一个数量级而不是签名位“ – php手册

有没有办法将二进制64位二进制字符串(很像decbin输出的一个字符串)转换为有符号整数?

解决方法:

从文档中,您不能使用bindec

bindec() interprets all binary_string values as unsigned integers. This is because bindec() sees the most significant bit as another order of magnitude rather than as the sign bit.

base_convert似乎完全忽略了签名.

如果您知道传入的字符串将始终是64位二进制文​​件而您不在32位系统上,则编写自定义函数非常容易.

>检查字符串是否长度为64个字符.

>检查最高有效位是否为1.

>翻转所有位

>加1

>否定

这是我一起敲的一个快速的.

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);

}

标签:php,flash,bits

来源: https://codeday.me/bug/20190704/1374664.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值