文章目录

  • 一、相关函数介绍
  • 二、数据类型占用字节数
  • 三、函数使用
  • 四、总结

一、相关函数介绍

定义和用法
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处理二进制数据相关推荐

  1. [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...

    主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...

  2. java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输

    atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 gbk会造成信息丢失 由于有些字符在gbk字符集中找不到对应的字符,所以默认使用编码63 ...

  3. java jdbc datetime_Java JDBC 操作二进制数据、日期时间

    二进制数据 mysql提供了四种类型来存储二进制数据: TinyBlob    最多可存储255字节 Blob   最多可存储65KB MediumBlob    最多可存储16MB LongBlob ...

  4. python book.save_2.3.1. 将二进制数据存为文件:saveBinDataToFile

    2.3.1. 将二进制数据存为文件:saveBinDataToFile #--------------------------------------------------------------- ...

  5. b是python文件二进制打开_如何在Python中打开和显示原始二进制数据?

    'rb'模式允许您从Python中的文件读取原始二进制数据:with open(filename, 'rb') as file: raw_binary_data = file.read() type( ...

  6. 在XML中发送二进制数据

    作者: BUILDER.COM XML通常被认为是用文本来描述数据的一种方法.例如,元素给出了文本名,元素的内容通常是基于文本的.但是有时候你需要输入数据而不是文本到你的XML文档.让我们来考虑你可能 ...

  7. mongodb存储二进制数据的二种方式——binary bson或gridfs

    python 版本为2.7 mongodb版本2.6.5 使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们 ...

  8. string来存放二进制数据

    在操作mysql数据库类型blob数据时,因为blob是二进制数据,将其存放时要注意,可以使用string来存储数据,然后放入数据库中,特别是在用protobuf序列化后 代码如下: #include ...

  9. 029_jdbc-mysql二进制数据

    1. MySQL支持的二进制数据类型:tinyblob, blob, mediumblob和longblob. 2. JDBC中我们用PrepareStatement的SetBlob和GetBlob获 ...

  10. [JavaScript]为JS处理二进制数据提供可能性的WEB API

    写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那 ...

最新文章

  1. Mac系统下安装Homebrew后无法使用brew命令
  2. vs code python 插件_工具篇-vscode效率提升插件
  3. 偏函数 匿名函数 高阶函数 map filter reduce
  4. server_u文件服务器已停止,Serv-U停止服务怎么解决
  5. ENSP配置 实例二 单臂路由配置
  6. 面试:Java分派机制
  7. 批量创建10个用户stu01-stu10,并且设置随机8位密码
  8. Python3不需要uuid:导入/usr/local/lib/python3.x/site-packages/uuid.py提示if not 0 time_low 32L错误
  9. Java版扫雷小游戏
  10. PostgreSQL教程
  11. 俄亥俄大学计算机科学系,俄亥俄大学课程及专业设置
  12. Python实现草莓熊手拿风车和鲜花
  13. 牛客月赛14-养鸽场-(二分图+转化二进制01背包)
  14. MYsql建立学生成绩表
  15. QT遇到资源文件不显示的问题这样解决
  16. Android视图绘制流程完全解析,带你一步步深入了解
  17. 直播网站源码,使用nodejs显示HTML页面
  18. 新思路计算机二级c语言破解版,新思路计算机二级软件
  19. 单元话题写作-Unit 1 英语学习
  20. Ubuntu 下小米手机驱动

热门文章

  1. 假定要建立一个学校科研项目管理的信息系统,需要管理如下信息: •教师:教师编号、教师姓名; •项目:项目编号、项目名称、资助额; •学生:学生编号、学生姓名、学位,学生按学位分为本科生和研究生。
  2. 触控板手势增强软件multitouch for mac
  3. windows 2003 下如何装 Avira Antivir(小红伞)
  4. sys驱动不能是exe_电脑小技巧如何处理svchost.exe进程
  5. 分动箱的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 7.exchange2013实战操作之收件人配置
  7. 精彩回顾 | 华为 HDG 成都站霸气上演 蓉城风云再起
  8. STM32定时器输出比较模式中的疑惑
  9. word排版之公式的自动化排版及引用
  10. VBScript的好处