⑴ 怎樣在php中把16進制HEX數據轉換為2進制數據呢
十六進制轉為二進制有兩種理解方法,第一是十六進制字元串轉二進制字元串,第二是十六進制數轉二進制數,下面分別介紹2種轉換方法:
1.hex2bin函數可以將十六進制字元串轉換為二進制字元串,詳細用法如下:
hex2bin — 轉換十六進制字元串為二進制字元串
stringhex2bin(string$data)
轉換十六進制字元串為二進制字元串。
參數:
data:十六進製表示的數據
返回值:
返回給定數據的二進製表示 或者在失敗時返回 FALSE。
異常:
如果輸入的十六進制字元串是奇數長數或者無效的十六進制字元串將會拋出E_WARNING 級別的錯誤。
示例:
$hex=hex2bin("");
echo$hex;//examplehexdata(其中16進制代表的是ascii碼)
2.base_convert是真正意義上的進制轉換函數
base_convert — 在任意進制之間轉換數字
stringbase_convert(string$number,int$frombase,int$tobase)
返回一字元串,包含 number以 tobase 進制的表示。number 本身的進制由frombase指定。frombase 和 tobase 都只能在2 和 36 之間(包括 2 和 36)。高於十進制的數字用字母 a-z 表示,例如a 表示 10,b 表示 11 以及 z 表示 35。
參數:
number:要轉換的數字
frombase:原始進制
tobase:轉換後的進制
示例:
$hexadecimal='A37334';
echobase_convert($hexadecimal,16,2);//101000110111001100110100
⑵ 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進制數據中的中文轉換為utf-8
使用以下函嫌襪數神擾:
string iconv ( string $in_charset , string $out_charset , string $str )
例:
str1 = '漢字'; // 假設此php源文件以GBK編碼保存,那麼str1就是GBK編碼,佔4個位元組
str2 = iconv('GBK', 'UTF-8', str1); // str2是utf8編碼,佔6個位元組
說明:如果你的php源文件已經以utf8編碼保存,芹瞎激就不需要這樣轉換了。
其它相關函數:
mb_convert_encoding
⑷ 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中怎麼以二進制形式表示數字
需要准備的材料分別是:電腦、php編輯器、瀏覽器。
1、首先,打開php編輯器,新建php文件,例如:index.php。
⑹ dht中的nodes二進制流編碼解碼在PHP中如何實現
escape() 方法:
採用ISO Latin字元集對指定的字元串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼(xx等於該字元在字元集表裡面的編碼的16進制數字)。比如,空格符對應的編碼是%20。unescape方法與此相反。不會被此方法編碼的字元: @ * / +
encodeURI() 方法:
把URI字元串採用UTF-8編碼格式轉化成escape格式的字元串。不會被此方法編碼的字元:! @ # $& * ( ) = : / ; ? + '
⑺ php $str=0x31,這樣定義一個16進制數據後,為什麼strlen($str)返回2,為什麼不能像C語言裡面佔一個byte
它只是返回長度,非字元串轉換成字元串,默認2個位元組一位
⑻ PHP 進制轉換 10進制轉2進制 自定義個函數
以下是一個轉換函數:
function dec_to_bin($datalist,$bin)
{
static$arr=array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
if(!is_array($datalist)) $datalist=array($datalist);
if($bin==10) return $datalist; //相同進制忽略
$bytelen=ceil(16/$bin); //獲得如果是$bin進制,一個位元組的長度
$aOutChar=array();
foreach($datalist as $num)
{
$t="";
$num=intval($num);
if($num===0) continue;
while($num>0)
{
$t=$arr[$num%$bin].$t;
$num=floor($num/$bin);
}
$tlen=strlen($t);
if($tlen % $bytelen != 0)
{
$pad_len=$bytelen-$tlen%$bytelen;
$t=str_pad("",$pad_len,"0",STR_PAD_LEFT).$t; //不足一個位元組長度,自動前面補充0
}
$aOutChar[]=$t;
}
return$aOutChar;
}
其實,PHP的base_convert、decbin函數就可以完成類似功能。