//演算法分析:我們想要實現的是數字相加,每位數的最大值為4,超過4進1位,即5進制。
//如果,數字的最後一位不等於4,那麼直接相加並輸出;如果最後一位是4,將這一位置1,並且進位1
//進位的1必須跟前面的數字進行相加,這就形成了一個遞歸,遞歸的條件是最後一位等於4
//為了跟前面的數字進行相加,我們必須先對原數字進行截取,比如數字1114,進位後應該得到1121
//代碼是這樣處理的:先把4置1,然後截取111,遞歸過程中執行111+1=112,然後返回112,並更上一次遞歸中得到的和的最後一位
//拼接成一個新的字元串:1121
『貳』 php接收二進制文件怎麼替換裡面的內容
php接收二進制文件怎麼替換裡面的內容
php接收二進制文件如下:
<?php
header('Content-type: text/html; charset=utf-8');
error_reporting(0);
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$xmlstr = $GLOBALS[HTTP_RAW_POST_DATA];//$_POST["data"];//
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');
$raw = $xmlstr;//得到post過來的二進制原始數據
$file = fopen("./upload/".$filename,"w");//打開文件准備寫入
fwrite($file,$raw);//寫入
fclose($file);//關閉
?>
接收的二進制文件中非標准字元(>0x7F)的位元組被替換為三個位元組,比如E2替換為EF 9F A2
現在我想在Php接收到文件之後還原回去,把EF 9F A2替換為E2,請問這個怎麼實現?
非常感謝!
PHP 二進制
------解決方案--------------------
他的數據轉換規則是這樣的:
文件頭不變,文件頭多長不清楚,圖上到0050h都一樣的
<=7F的位元組,因為utf-8也一樣,可以認為也轉換了utf-8
>=80的位元組,高位加上F7,再轉utf-8,例如E2就變成F7E2然後轉utf-8成為EF 9F A2
至少他圖中E2/FB/91/B2/81...都滿足這個規則
------解決方案--------------------
本帖最後由 xuzuning 於 2013-05-02 15:35:02 編輯
用正則可這樣寫
假定數據已把存在變數 $s 中,則
$s = preg_replace_callback('/[\xef]../', 'foo', $s);
function foo($r) {
$c = (ord($r[0]{1}) & 0x03) << 6;
$c += (ord($r[0]{2}) & 0x3f);
return chr($c);
}
『叄』 php怎樣將二進制流存到文件中
整形轉化成2二進制可以用base_convert:
$str=0x8000;
echo$str2=base_convert($str,16,2);
echo'<br>';
echobase_convert($str2,2,16);
[code]
字元串文件等可以考慮用pack和unpack轉化成二進制
[code=PHP]
$file1='F:/46.gif';//隨便拷一個圖片作為測試用
$file2='F:/test.txt';//生成的二進制流保存在這個文件里
$file3='F:/47.gif';//由二進制流還原成的文件
$size=filesize($file1);
echo'文件大小為:'.$size;
echo" <br>轉化為二進制...";
$content=file_get_contents($file1);
$content=bstr2bin($content);
$fp=fopen($file2,'w');
fwrite($fp,$content);
fclose($fp);
$size2=filesize($file2);
echo'轉化成二進制後文件大小為:'.$size2;
$content=bin2bstr($content);
$fp=fopen($file3,'w');
fwrite($fp,$content);
fclose($fp);
functionbin2bstr($input)
//Convertabinaryexpression(e.g.,"100111")intoabinary-string
{
if(!is_string($input))returnnull;//Sanitycheck
//Packintoastring
$input=str_split($input,4);
$str='';
foreach($inputas$v)
{
$str.=base_convert($v,2,16);
}
$str=pack('H*',$str);
return$str;
}
functionbstr2bin($input)
//Binaryrepresentationofabinary-string
{
if(!is_string($input))returnnull;//Sanitycheck
//Unpackasahexadecimalstring
$value=unpack('H*',$input);
//Outputbinaryrepresentation
$value=str_split($value[1],1);
$bin='';
foreach($valueas$v)
{
$b=str_pad(base_convert($v,16,2),4,'0',STR_PAD_LEFT);
$bin.=$b;
}
return$bin;
}
『肆』 php 數組 如何二進制轉換
//使用serialize/unserialize
$array=array();
$array['key']='website';
$array['value']='url';
$a=serialize($array);
echo$a;
unset($array);
$a=unserialize($a);
print_r($a);
『伍』 PHP中怎麼以二進制形式表示數字
需要准備的材料分別是:電腦、php編輯器、瀏覽器。
1、首先,打開php編輯器,新建php文件,例如:index.php。
『陸』 php 怎麼把字元串轉化為二進制流
header("Content-type:text/html;charset=utf-8");
/**
*將字元串轉換成二進制
*@paramtype$str
*@returntype
*/
functionStrToBin($str){
//1.列出每個字元
$arr=preg_split('/(?<!^)(?!$)/u',$str);
//2.unpack字元
foreach($arras&$v){
$temp=unpack('H*',$v);
$v=base_convert($temp[1],16,2);
unset($temp);
}
returnjoin('',$arr);
}
/**
*講二進制轉換成字元串
*@paramtype$str
*@returntype
*/
functionBinToStr($str){
$arr=explode('',$str);
foreach($arras&$v){
$v=pack("H".strlen(base_convert($v,2,16)),base_convert($v,2,16));
}
returnjoin('',$arr);
}
『柒』 在PHP中,字母a和字母A的二進制,八進制,十進制,十六進制的寫法是什麼
字母"a":
二進制:1100001
八進制:141
十進制:97
十六進制:61
你可以通過以下代碼來查看:
<?php
$num=ord('a');
//二進制
echodecbin($num),',';
//八進制
echodecoct($num),',';
//十進制
echo$num,',';
//十六進制
echodechex($num),',';
『捌』 PHP 什麼是二進制字元串
二進制字元串是 位元組字元串。非二進制字元串是字元字元串
這個體現在mysql資料庫中為:
BINARY和VARBINARY類類似於CHAR和VARCHAR,不同的是它們包含二進制字元串而不要非二進制字元串。也就是說,它們包含位元組字元串而不是字元字元串。這說明它們沒有字元集,並且排序和比較基於列值位元組的數值值。
BLOB 列被視為二進制字元串(位元組字元串)。TEXT列被視為非二進制字元串(字元字元串)。
『玖』 php中能輸出二進制數據么
可以的。
可以用一個十進制二進制的函數decbin(),生成的是一個字元串,直接輸出即可