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脚本的10个技巧(4)
Oct 09 PHP
生成卡号php代码
Apr 09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
php获取网页上所有链接的方法
Apr 03 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
js操作select控件的几种方法
2010/06/02 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python中下划线的使用方法
2015/03/27 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
python虚拟环境完美部署教程
2019/08/06 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
python 实现有道翻译功能
2021/02/26 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
红色故事演讲稿
2014/05/22 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
MySQL事务的隔离级别详情
2022/07/15 MySQL
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang