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.MVC的模板标签系统(五)
Sep 05 PHP
PHP - Html Transfer Code
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
php Ajax乱码
Apr 09 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
php缓冲输出实例分析
Jan 05 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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设置进度条的方法
2015/07/08 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
php实现小程序支付完整版
2018/10/09 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
python实现彩票系统
2020/06/28 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
预备党员政审材料
2014/02/04 职场文书
酒店端午节促销方案
2014/02/18 职场文书
员工保密协议书
2014/09/27 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL