php处理二进制数据
文章目录
- 一、相关函数介绍
- 二、数据类型占用字节数
- 三、函数使用
- 四、总结
一、相关函数介绍
定义和用法
pack() 函数把数据装入一个二进制字符串。语法
pack(format,args+)参数 描述
format 必需。规定在包装数据时所使用的格式。
可能的值:a - NUL 填充的字符串
A - SPACE 填充的字符串
h - 十六进制字符串,低位在前
H - 十六进制字符串,高位在前
c - signed char
C - unsigned char
s - signed short(总是16位, machine 字节顺序)
S - unsigned short(总是16位, machine 字节顺序)
n - unsigned short(总是16位, big endian 字节顺序)
v - unsigned short(总是16位, little endian 字节顺序)
i - signed integer(取决于machine的大小和字节顺序)
I - unsigned integer(取决于machine的大小和字节顺序)
l - signed long(总是32位, machine 字节顺序)
L - unsigned long(总是32位, machine 字节顺序)
N - unsigned long(总是32位, big endian 字节顺序)
V - unsigned long(总是32位, little endian 字节顺序)
f - float(取决于 machine 的大小和表示)
d - double(取决于 machine 的大小和表示)
x - NUL 字节
X - 备份一个字节
Z - NUL 填充的字符串
@ - NUL 填充绝对位置
args+ 可选。规定被包装的一个或多个参数。
定义和用法
unpack() 函数从二进制字符串对数据进行解包。语法
unpack(format,data)参数 描述
format 必需。规定在解包数据时所使用的格式。
可能的值:a - NUL 填充的字符串
A - SPACE 填充的字符串
h - 十六进制字符串,低位在前
H - 十六进制字符串,高位在前
c - signed char
C - unsigned char
s - signed short(总是16位, machine 字节顺序)
S - unsigned short(总是16位, machine 字节顺序)
n - unsigned short(总是16位, big endian 字节顺序)
v - unsigned short(总是16位, little endian 字节顺序)
i - signed integer(取决于 machine 的大小和字节顺序)
I - unsigned integer(取决于 machine 的大小和字节顺序)
l - signed long(总是32位, machine 字节顺序)
L - unsigned long(总是32位, machine 字节顺序)
N - unsigned long(总是32位, big endian 字节顺序)
V - unsigned long(总是32位, little endian 字节顺序)
f - float(取决于 machine 的大小和表示)
d - double(取决于 machine 的大小和表示)
x - NUL 字节
X - 备份一个字节
Z - NUL 填充的字符串
@ - NUL 填充绝对位置
data 必需。规定被解包的二进制数据。
二、数据类型占用字节数
三、函数使用
//代码
$a = base64_encode(pack("l", 82) . pack("f", 231.3) . pack("f", 42) . pack("a3", "abc") . pack("a6", "张三"));echo $a . '<br/>';$b = base64_decode($a);echo unpack('l', substr($b, 0, 4))[1] . '<br/>'; //int固定占用4个字节
echo unpack('f', substr($b, 4, 4))[1] . '<br/>'; //float固定占用4个字节
echo unpack('f', substr($b, 8, 4))[1] . '<br/>'; //float固定占用4个字节
echo unpack('a3', substr($b, 12, 3))[1] . '<br/>'; //一个英文占一个字节,所以是a3
echo unpack('a6', substr($b, 15, 6))[1] . '<br/>'; //一个中文占三个字节,所以2个字就是a6
汉字占用字节:GBK编码,一个汉字占两个字节。 UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节。UTF-16 统一采用两个字节表示一个字符。
//打印结果
UgAAAM1MZ0MAAChCYWJj5byg5LiJ
82
231.30000305176
42
abc
张三
四、总结
通过以上代码,可以发现,解密时必须知道加密的规则,才能正常解密数据,所以使用二进制数据传递还可以提升数据的安全性,使用二进制然后base64加密之后,长度也会变短,可以提高数据的网络传输效率
php处理二进制数据相关推荐
- [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...
主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...
- java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 gbk会造成信息丢失 由于有些字符在gbk字符集中找不到对应的字符,所以默认使用编码63 ...
- java jdbc datetime_Java JDBC 操作二进制数据、日期时间
二进制数据 mysql提供了四种类型来存储二进制数据: TinyBlob 最多可存储255字节 Blob 最多可存储65KB MediumBlob 最多可存储16MB LongBlob ...
- python book.save_2.3.1. 将二进制数据存为文件:saveBinDataToFile
2.3.1. 将二进制数据存为文件:saveBinDataToFile #--------------------------------------------------------------- ...
- b是python文件二进制打开_如何在Python中打开和显示原始二进制数据?
'rb'模式允许您从Python中的文件读取原始二进制数据:with open(filename, 'rb') as file: raw_binary_data = file.read() type( ...
- 在XML中发送二进制数据
作者: BUILDER.COM XML通常被认为是用文本来描述数据的一种方法.例如,元素给出了文本名,元素的内容通常是基于文本的.但是有时候你需要输入数据而不是文本到你的XML文档.让我们来考虑你可能 ...
- mongodb存储二进制数据的二种方式——binary bson或gridfs
python 版本为2.7 mongodb版本2.6.5 使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们 ...
- string来存放二进制数据
在操作mysql数据库类型blob数据时,因为blob是二进制数据,将其存放时要注意,可以使用string来存储数据,然后放入数据库中,特别是在用protobuf序列化后 代码如下: #include ...
- 029_jdbc-mysql二进制数据
1. MySQL支持的二进制数据类型:tinyblob, blob, mediumblob和longblob. 2. JDBC中我们用PrepareStatement的SetBlob和GetBlob获 ...
- [JavaScript]为JS处理二进制数据提供可能性的WEB API
写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那 ...
最新文章
- Mac系统下安装Homebrew后无法使用brew命令
- vs code python 插件_工具篇-vscode效率提升插件
- 偏函数 匿名函数 高阶函数 map filter reduce
- server_u文件服务器已停止,Serv-U停止服务怎么解决
- ENSP配置 实例二 单臂路由配置
- 面试:Java分派机制
- 批量创建10个用户stu01-stu10,并且设置随机8位密码
- Python3不需要uuid:导入/usr/local/lib/python3.x/site-packages/uuid.py提示if not 0 time_low 32L错误
- Java版扫雷小游戏
- PostgreSQL教程
- 俄亥俄大学计算机科学系,俄亥俄大学课程及专业设置
- Python实现草莓熊手拿风车和鲜花
- 牛客月赛14-养鸽场-(二分图+转化二进制01背包)
- MYsql建立学生成绩表
- QT遇到资源文件不显示的问题这样解决
- Android视图绘制流程完全解析,带你一步步深入了解
- 直播网站源码,使用nodejs显示HTML页面
- 新思路计算机二级c语言破解版,新思路计算机二级软件
- 单元话题写作-Unit 1 英语学习
- Ubuntu 下小米手机驱动
热门文章
- 假定要建立一个学校科研项目管理的信息系统,需要管理如下信息: •教师:教师编号、教师姓名; •项目:项目编号、项目名称、资助额; •学生:学生编号、学生姓名、学位,学生按学位分为本科生和研究生。
- 触控板手势增强软件multitouch for mac
- windows 2003 下如何装 Avira Antivir(小红伞)
- sys驱动不能是exe_电脑小技巧如何处理svchost.exe进程
- 分动箱的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 7.exchange2013实战操作之收件人配置
- 精彩回顾 | 华为 HDG 成都站霸气上演 蓉城风云再起
- STM32定时器输出比较模式中的疑惑
- word排版之公式的自动化排版及引用
- VBScript的好处