PHP中字符与字节的区别及字符串与字节转换示例
字符:
字符是可使用多种不同字符方案或代码页来表示的抽象实体。例如,UnicodeUTF-16编码将字符表示为16位整数序列,而UnicodeUTF-8编码则将相同的字符表示为8位字节序列。公共语言运行库使用UnicodeUTF-16(Unicode转换格式,16位编码形式)表示字符。
php在UTF-8编码下,一个汉字占3个字符,gbk编码下只占2个字符。
字节(Byte):
字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。
应用:
如果数据库中表为UTF8编码,则其中字段设置为最长10位字符,则最多存入长度为eg:'我是中1'
下面看下PHP字符串与字节转换示例
<?php
/**
*byte数组与字符串转化类
*/
classBytes{
/**
*转换一个String字符串为byte数组
*@param$str需要转换的字符串
*@param$bytes目标byte数组
*@authorZikie
*/
publicstaticfunctiongetBytes($string){
$bytes=array();
for($i=0;$i<strlen($string);$i++){
$bytes[]=ord($string[$i]);
}
return$bytes;
}
/**
*将字节数组转化为String类型的数据
*@param$bytes字节数组
*@param$str目标字符串
*@return一个String类型的数据
*/
publicstaticfunctiontoStr($bytes){
$str='';
foreach($bytesas$ch){
$str.=chr($ch);
}
return$str;
}
/**
*转换一个int为byte数组
*@param$byt目标byte数组
*@param$val需要转换的字符串
*
*/
publicstaticfunctionintegerToBytes($val){
$byt=array();
$byt[0]=($val&0xff);
$byt[1]=($val>>8&0xff);
$byt[2]=($val>>16&0xff);
$byt[3]=($val>>24&0xff);
return$byt;
}
/**
*从字节数组中指定的位置读取一个Integer类型的数据
*@param$bytes字节数组
*@param$position指定的开始位置
*@return一个Integer类型的数据
*/
publicstaticfunctionbytesToInteger($bytes,$position){
$val=0;
$val=$bytes[$position+3]&0xff;
$val<<=8;
$val|=$bytes[$position+2]&0xff;
$val<<=8;
$val|=$bytes[$position+1]&0xff;
$val<<=8;
$val|=$bytes[$position]&0xff;
return$val;
}
/**
*转换一个shor字符串为byte数组
*@param$byt目标byte数组
*@param$val需要转换的字符串
*
*/
publicstaticfunctionshortToBytes($val){
$byt=array();
$byt[0]=($val&0xff);
$byt[1]=($val>>8&0xff);
return$byt;
}
/**
*从字节数组中指定的位置读取一个Short类型的数据。
*@param$bytes字节数组
*@param$position指定的开始位置
*@return一个Short类型的数据
*/
publicstaticfunctionbytesToShort($bytes,$position){
$val=0;
$val=$bytes[$position+1]&0xFF;
$val=$val<<8;
$val|=$bytes[$position]&0xFF;
return$val;
}
}
?>