Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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反转变量中的所有位_Php_Bit Manipulation - Fatal编程技术网

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

我需要读取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_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
这样的东西做什么?