ArrayBuffer与字符串的互相转换

Posted 7qin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayBuffer与字符串的互相转换相关的知识,希望对你有一定的参考价值。

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

以上是关于ArrayBuffer与字符串的互相转换的主要内容,如果未能解决你的问题,请参考以下文章

ArrayBuffer 转换为字符串

宽字节与多字节互相转换

ArrayBuffer转换成字符串中文乱码问题

javascript 怎么将字符串转换为ArrayBuffer

js字符串与Unicode编码互相转换

从 Array(保存整数)创建 ArrayBuffer 并再次返回