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; } } ?>