⑴ 怎样在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函数就可以完成类似功能。