重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
把二进制字符串先转为byte[] ,接收后再转回来 byte[] msg = Encoding.Default.GetBytes(你的二进制字符串); socket发送 socket接收byte[] string 你的二进制字符串
成都创新互联专业为企业提供东安网站建设、东安做网站、东安网站设计、东安网站制作等企业网站建设、网页设计与制作、东安企业网站模板建站服务,十多年东安做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
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);
}
一般是直接提供资源的链接,他们使用即可。
二进制数据可以通过base64处理后传过去。
浏览器里可以通过 img src="data:image/jpeg;base64,XXX"直接显示图片,
XXX表示图片内容base64_encode后的结果
* 使用方法:
* $post_string = "app=requestversion=beta";
* request_by_other('url',$post_string);
*/
function request_by_other($remote_server, $post_string)
{
$context = array(
'http' = array(
'method' = 'POST',
'header' = 'Content-type: application/x-www-form-urlencoded' .
'\r\n'.'User-Agent : Jimmy\'s POST Example beta' .
'\r\n'.'Content-length:' . strlen($post_string) + 8,
'content' = 'mypost=' . $post_string)
);
$stream_context = stream_context_create($context);
比如此类名字叫做imageUpload.class.php
那么首先是要引入该类文件用include("imageUpload.class.php");
第二步是实例化该类$inputimage = new imageUpload("input.jpg","./");
第三部是调用二进制转换成图片的方法了,$inputimage-stream2Image();
实例化该类需要传两个参数,第一个是需要保存的图片名字,第二个是图片保存路径地址。