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模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
php简单中奖算法(实例)
Aug 15 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php中变量及部分适用方法
2008/03/27 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
十佳好少年事迹材料
2014/08/21 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis