PHP字串與位元組數組的例子

來源:互聯網
上載者:User

一、正則法(當文本相當長時,速度會很快)

function stringToByteArray($str,$charset,$to_charset) {
$str = iconv($charset,$to_charset,$str);
preg_match_all(‘/(.)/s’,$str,$bytes);
$bytes=array_map(‘ord’,$bytes[1]) ;
return $bytes;
}
function byteArrayToString($bytes,$charset,$to_charset) {
$bytes=array_map(‘chr’,$bytes);
$str=implode(”,$bytes);
$str = iconv($to_charset,$charset,$str);
return $str;
}
$byteArray=stringToByteArray(‘http測試’,’utf-8′,’gbk’);
print_r($byteArray);
$retStr=byteArrayToString($byteArray,’utf-8′,’gbk’);
echo $retStr;

一、迴圈法

/**
* 轉換一個String字串為byte數組
* @param $str 需要轉換的字串
* @param $bytes 目標byte數組
* @author Zikie
*/
function getBytes($string) {
$bytes = array();
for($i = 0; $i < strlen($string); $i++){
$bytes[] = ord($string[$i]);
}
return $bytes;
}
/**
* 將位元組數組轉化為String類型的資料
* @param $bytes 位元組數組
* @param $str 目標字串
* @return 一個String類型的資料
*/
function toStr($bytes) {
$str = '';
foreach($bytes as $ch) {
$str .= chr($ch);
}
return $str;
}
$byteArray=getBytes(iconv('utf-8','gbk','http測試'));
print_r($byteArray);
$retStr=toStr($byteArray);
echo $retStr;

兩種方法都是一樣的

結果為:Array
(
[0] => 104
[1] => 116
[2] => 116
[3] => 112
[4] => 178
[5] => 226
[6] => 202
[7] => 212
)

結果為:http測試

補充一個通用函數

 要加密,則需要將字串轉為ASCII的位元組數組。反之,則要轉回來。代碼為什麼速度快?那就是,能不用FOR迴圈的,直接不用。使用PHP原有的函數,讓它實現,這是最快的

<?php 
function stringToByteArray($str,$charset) { 
 
    $str = iconv($charset,'UTF-16',$str); 
    preg_match_all('/(.)/s',$str,$bytes);  //註:本文的盜版已經有了。不過,提示一下讀者,這裡的正則改了。 
    $bytes=array_map('ord',$bytes[1]) ; 
    return $bytes; 
 

 
function byteArrayToString($bytes,$charset) { 
 
    $bytes=array_map('chr',$bytes); 
    $str=implode('',$bytes); 
    $str = iconv('UTF-16',$charset,$str); 
    return $str; 
 

 
$byteArray=stringToByteArray('13億人口大國,自認為精通PHP的還是相當多的!','utf-8'); 
print_r($byteArray); 
$retStr=byteArrayToString($byteArray,'utf-8'); 
echo $retStr; 
 
?> 

每個函數只有4行代碼,沒有FOR迴圈,但當文本相當長時,你就能發現,差別真的很大

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.