扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
十六进制转为二进制有两种理解方法,第一是十六进制字符串转二进制字符串,第二是十六进制数转二进制数,下面分别介绍2种转换方法:
成都创新互联成都网站建设按需策划设计,是成都网站制作公司,为成都水泥搅拌车提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站营销推广热线:18982081108
1.hex2bin函数可以将十六进制字符串转换为二进制字符串,详细用法如下:
hex2bin — 转换十六进制字符串为二进制字符串
string hex2bin(string $data)
转换十六进制字符串为二进制字符串。
参数:
data:十六进制表示的数据
返回值:
返回给定数据的二进制表示 或者在失败时返回 FALSE。
异常:
如果输入的十六进制字符串是奇数长数或者无效的十六进制字符串将会抛出E_WARNING 级别的错误。
示例:
$hex = hex2bin("6578616d706c65206865782064617461");
echo $hex;//example hex data(其中16进制代表的是ascii码)
2.base_convert是真正意义上的进制转换函数
base_convert — 在任意进制之间转换数字
string base_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';
echo base_convert($hexadecimal, 16, 2);//101000110111001100110100
整形转化成 2二进制 可以用 base_convert:
$str = 0x8000;
echo $str2 = base_convert($str, 16, 2);
echo 'br';
echo base_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 "\nbr转化为二进制 ...";
$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);
function bin2bstr($input)
// Convert a binary expression (e.g., "100111") into a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Pack into a string
$input = str_split($input, 4);
$str = '';
foreach ($input as $v)
{
$str .= base_convert($v, 2, 16);
}
$str = pack('H*', $str);
return $str;
}
function bstr2bin($input)
// Binary representation of a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);
// Output binary representation
$value = str_split($value[1], 1);
$bin = '';
foreach ($value as $v)
{
$b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT);
$bin .= $b;
}
return $bin;
}
把文件里面的每一个字节的ascii码转成16进制就可以了,如下:
$content = file_get_contents("myfile");
$hex = "";
for($i=0;$i=strlen($content);$i++){
$asc = ord(substr($content,$i,1));
$hex .= dechex($asc);
}
file_put_contents("mynewfile",$hex);
//字符串转换成16进制
function str2hex($str){
$hex = '';
for($i=0,$length=mb_strlen($str); $i$length; $i++){
$hex .= dechex(ord($str{$i}));
}
return $hex;
}
//16进制转换成字符串
function hex2str($hex){
$str = '';
$arr = str_split($hex, 2);
foreach($arr as $bit){
$str .= chr(hexdec($bit));
}
return $str;
}
function test(){
//utf8字符测试
$str = '中文';
echo mb_strlen($str);
echo '';
$hex = str2hex($str);
echo $hex;
echo '';
$dec = hex2str($hex);
echo $dec;
echo "";
echo "hr";
//gbk测试
$gbkstr = mb_convert_encoding($str,'GBK','UTF-8');
echo mb_strlen($gbkstr);
echo '';
$hex = str2hex($gbkstr);
echo $hex;
echo '';
$dec = mb_convert_encoding(hex2str($hex), 'UTF-8', 'GBK');
echo $dec;
echo "";
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Copyright © 2002-2023 www.kswjz.com 快上网建站品牌 QQ:244261566 版权所有 备案号:蜀ICP备19037934号
微信二维码
移动版官网