使用PHP反转变量中的所有位
我需要读取PHP中的二进制文件,搜索位置,反转它们的位并处理结果 当前我的代码如下所示:使用PHP反转变量中的所有位,php,bit-manipulation,Php,Bit Manipulation,我需要读取PHP中的二进制文件,搜索位置,反转它们的位并处理结果 当前我的代码如下所示: $src_file = "firmware/shapeshifter_v2.02.jic"; $offset = 983195; if ($src_handle = fopen($src_file,"rb")) { fseek($src_handle, $offset); $src_content = fread($src_handle, 1024); fclose($src_handle);
$src_file = "firmware/shapeshifter_v2.02.jic";
$offset = 983195;
if ($src_handle = fopen($src_file,"rb")) {
fseek($src_handle, $offset);
$src_content = fread($src_handle, 1024);
fclose($src_handle);
$src_content = $src_content & 128 >> 7 + $src_content & 64 >> 5 + $src_content & 32 >> 3 + $src_content & 16 >> 1 + $src_content & 8 << 1 + $src_content & 4 << 3 + $src_content & 2 << 5 + $src_content & 1 << 7;
print bin2hex($src_content);
}
$src_file=“firmware/shapeshifter_v2.02.jic”;
$offset=983195;
如果($src\u handle=fopen($src\u文件,“rb”)){
fseek($src_handle,$offset);
$src_content=fread($src_handle,1024);
fclose($src_handle);
$src_content=$src_content&128>>7+$src_content&64>>5+$src_content&32>>3+$src_content&16>>1+$src_content&8您正在将1024个字节读入字符串,而不是将单个字节读入数字。使用:
$src_content = ord(fread($src_handle, 1));
这将读取一个字节,然后将其从字符转换为数字代码。然后,您可以在执行此操作时反转此数字中的位。要反转二进制值中的位,请使用以下命令:
<?php
$binaryValue = 101010;
echo strtr($binaryValue,[1,0]);
?>
它将输出:010101
希望有帮助。谢谢。最后,我使用以下算法在PHP中成功地反转了字节位:
$binary = decbin(ord($char));
$binary = str_pad($binary, 8, 0, STR_PAD_LEFT);
$binary = strrev($binary);
$reversednumber = bindec($binary);
$reversed = pack("C",$reversednumber);
首先,将字节转换为整数,得到二进制表示形式,然后用0填充,直到8个字符长。
然后它反转字符串并将字符串重新组合为一个数字。最后一步是将其重新打包为一个单字节字符串。不相关的注意:str\u split
,array\u map
,内爆
。您正在读取1024个字节,而不仅仅是一个数字。您希望$src\u contents&128
这样的东西做什么?