1. 程式人生 > >ArrayBuffer與字符串的互相轉換

ArrayBuffer與字符串的互相轉換

reac mage als utf-16 xpl tails 轉換成 進制數 unset

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與字符串的互相轉換