二进制对于php来说是一个很偏的东西,因为php中对于二进制的支持是非常有限的,今天在一个php群组里讨论一个问题讨论了一下午也没讨论出结果来,现在总结一下,不知道我想的对不对,因为本来还觉得自己挺理解的,后来讨论多了,连二进制是什么都糊涂了.
问题:群里有个朋友接受一个项目,以前是用java写的,里面有很多对二进制文件的操作,包括图片作为二进制存储,然后在这个二进制文件中加入一些用户输入的字符串的二进制格式,就是把图片和字符串组合到一个二进制文件中,我们卡在了怎么把字符串写入到二进制文件中的问题这里.
<?php
$header_str="abc123";
function asc2bin ($temp) {
$len = strlen($temp);
for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1)));
return $data;
}
$aa = asc2bin($header_str);
$content_2=pack('H*', $aa);
$handle = fopen ("aaaa.bin", "wb");
fwrite($handle, $content_2);
fclose($handle);
?>下面是我的最终代码,它将一个abc123的字符串作为二进制流写进二进制文件 aaaa.bin中,里面用到了pack函数,这个函数可以将php的内置类型转换成二进制格式,它和unpack配套,后者可以讲二进制转换成php的内置类型.
上面是用法,但是在我们的讨论中遇到了问题,归根结底就是说 二进制文件有没有可能在记事本里显示成不是乱码的形式呢?群上很多人说二进制文件在记事本里查看就应该是乱码,我一开始也深信不移,所以对自己的程序也没有了信心,因为我这个二进制文件虽然在高级文本处理工具里查看,十六进制形式的确是正确的,可是在记事本中竟然不会显示乱码,而是显示"abc123",我开始想我应该搞错了,我应该把字符串直接写进二进制文件中了,而不是写的二进制流.
现在我回来想了想,突然想到二进制文件就一定是乱码了么?英文字母就是以字节编码的,一个英文字母占一字节,8位,我把一个字符串的二进制写入一个二进制文件后,在记事本中当然会显示文本啦,因为记事本自动解析二进制,然后转换成字符串的格式了,我觉得我上面的程序其实是正确的.
【相关教程推荐】
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
0
立即学习“PHP免费学习笔记(深入)”;
1. php编程从入门到精通全套视频教程
2. php从入门到精通
3. bootstrap教程
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号