PHP中字符与字节的区别及字符串与字节转换示例


Posted in PHP onOctober 15, 2016

字符:

字符是可使用多种不同字符方案或代码页来表示的抽象实体。例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列。公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符。

php在UTF-8编码下,一个汉字占3个字符,gbk编码下只占2个字符。

字节(Byte):

字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。

应用:

如果数据库中表为UTF8编码,则其中字段设置为最长10位字符,则最多存入长度为 eg: '我是中1'

下面看下PHP字符串与字节转换示例

<?php 
/** 
* byte数组与字符串转化类 
*/
class Bytes { 
/** 
* 转换一个String字符串为byte数组 
* @param $str 需要转换的字符串 
* @param $bytes 目标byte数组 
* @author Zikie 
*/
public static 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类型的数据 
*/
public static function toStr($bytes) { 
$str = ''; 
foreach($bytes as $ch) { 
$str .= chr($ch); 
} 
return $str; 
} 
/** 
* 转换一个int为byte数组 
* @param $byt 目标byte数组 
* @param $val 需要转换的字符串 
* 
*/
public static function integerToBytes($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类型的数据 
*/
public static function bytesToInteger($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 需要转换的字符串 
* 
*/
public static function shortToBytes($val) { 
$byt = array(); 
$byt[0] = ($val & 0xff); 
$byt[1] = ($val >> 8 & 0xff); 
return $byt; 
} 
/** 
* 从字节数组中指定的位置读取一个Short类型的数据。 
* @param $bytes 字节数组 
* @param $position 指定的开始位置 
* @return 一个Short类型的数据 
*/
public static function bytesToShort($bytes, $position) { 
$val = 0; 
$val = $bytes[$position + 1] & 0xFF; 
$val = $val << 8; 
$val |= $bytes[$position] & 0xFF; 
return $val; 
} 
} 
?>
PHP 相关文章推荐
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
php文件上传的例子及参数详解
Dec 12 PHP
PHP 读取和编写 XML
Nov 19 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 #PHP
PHP云打印类完整示例
Oct 15 #PHP
PHP实现统计在线人数功能示例
Oct 15 #PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 #PHP
PHP实现导出excel数据的类库用法示例
Oct 15 #PHP
PHP数组操作简单案例分析
Oct 15 #PHP
PHP链表操作简单示例
Oct 15 #PHP
You might like
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
模拟select的代码
2011/10/19 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python八皇后问题的解决方法
2018/09/27 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
实习求职信
2013/12/01 职场文书
海飞丝广告词
2014/03/20 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
另类冲刺标语
2014/06/24 职场文书
五四青年节的活动方案
2014/08/20 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
检讨书范文大全
2015/05/07 职场文书
2015年财政局工作总结
2015/05/21 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
python 判断文件或文件夹是否存在
2022/03/18 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript