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 相关文章推荐
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
解析PHP缓存函数的使用说明
May 10 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
Thinkphp无限级分类代码
Nov 11 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
PHP微信支付实例解析
Jul 22 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
php文件上传原理与实现方法详解
Dec 20 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实现MVC开发得最简单的方法――模型
2007/04/10 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
详解Python中find()方法的使用
2015/05/18 Python
深入讲解Python编程中的字符串
2015/10/14 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
django2 快速安装指南分享
2018/01/05 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
如何基于python生成list的所有的子集
2019/11/11 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
大学生个人学习总结
2015/02/15 职场文书
公司停电通知
2015/04/15 职场文书
工程服务质量承诺书
2015/04/29 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python