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怎样调用MSSQL的存储过程
Oct 09 PHP
PHP 身份证号验证函数
May 07 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
php商品对比功能代码分享
Sep 24 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
深入解析php之apc
2013/05/15 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python 除法保留两位小数点的方法
2018/07/16 Python
详解python调用cmd命令三种方法
2019/07/08 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
《狮子和兔子》教学反思
2014/03/02 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
企业法人代表证明书
2014/09/27 职场文书
个人欠条范本
2015/07/03 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL