ArrayBuffer与字符串的互相转换
ArrayBuffer转为字符串,或者字符串转为ArrayBuffer,有一个前提,即字符串的编码方法是确定的。假定字符串采用UTF-16编码(JavaScript的内部编码方式),可以自己编写转换函数。
// ArrayBuffer转为字符串,参数为ArrayBuffer对象 function ab2str(buf) { return String.fromCharCode.apply(null, new Uint16Array(buf)); } // 字符串转为ArrayBuffer对象,参数为字符串 function str2ab(str) { var buf = new ArrayBuffer(str.length*2); // 每个字符占用2个字节 var bufView = new Uint16Array(buf); for (var i=0, strLen=str.length; i<strLen; i++) { bufView[i] = str.charCodeAt(i); } return buf; }
PHP接收二进制流并生成文件
<?php /** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input * $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 都不能用于 enctype=multipart/form-data * @param String $file 要生成的文件路径 * @return boolean */ function binary_to_file($file){ $content = $GLOBALS['HTTP_RAW_POST_DATA']; // 需要php.ini设置 if(empty($content)){ $content = file_get_contents('php://input'); // 不需要php.ini设置,内存压力小 } $ret = file_put_contents($file, $content, true); return $ret; } // demo binary_to_file('photo/test.png'); ?>
php 字符串转二进制流
<? header("Content-type: text/html; charset=utf-8"); /** * 将字符串转换成二进制 * @param type $str * @return type */ function StrToBin($str){ //1.列出每个字符 $arr = preg_split('/(?<!^)(?!$)/u', $str); //2.unpack字符 foreach($arr as &$v){ $temp = unpack('H*', $v); $v = base_convert($temp[1], 16, 2); unset($temp); } return join(' ',$arr); } /** * 讲二进制转换成字符串 * @param type $str * @return type */ function BinToStr($str){ $arr = explode(' ', $str); foreach($arr as &$v){ $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16)); } return join('', $arr); }
php关于发送和接受二进制数据
之前做一个项目,从文件中读取图片为二进制,然后需要发送给客户端,由于echo输出的字符串只能为utf8编码的,所以弄了很久也不知道要怎么把二进制发出去,今天终于找到了解决的办法,把读出的二进制用base64进行编码之后,就可以向字符串一样使用了。代码如下:
$my_file = file_get_contents(‘1.jpg’);//读取文件为字符串
$data=base64_encode($my_file);//用base64对字符串编码
echo $data;//发送
php将图片转成二进制流
//获取临时文件名 $strTmpName = $_FILES['file']['tmp_name']; //转成二进制流 $strData = base64EncodeImage(strTmpName ); //输出 echo '<img src=',$strData,'>'; function base64EncodeImage($strTmpName) { $base64Image = ''; $imageInfo = getimagesize($strTmpName); $imageData = fread(fopen($strTmpName , 'r'), filesize($strTmpName)); $base64Image = 'data:' . $imageInfo['mime'] . ';base64,' . chunk_split(base64_encode($imageData)); return $base64Image; }
相关链接:
https://www.cnblogs.com/copperhaze/p/6149041.html
https://blog.csdn.net/fdipzone/article/details/7473949#
https://zhidao.baidu.com/question/1694649074633248428.html
https://www.cnblogs.com/cyn126/p/3291624.html
https://blog.csdn.net/onlymayao/article/details/86170721