php读二进制数据方法,php读取memcache二进制数据

memcache作为一个数据中间层,经常用来做数据交换。

比如在某个系统内部我们规定如下的用户状态的信息,每个用户只需要存续52个字节。

Key state#ID 如”state#10888”

Value : (二进制的数据 )

用户 ID Uint32

Type 用户类型 Uint8 :

State 用户状态 Uint8 :

服务器 IP Uint32

最后在线时间 Uint64

Session ID的长度 Uint16

Session ID char[32]

总共52个字节

那么怎么在php里面得到通过memcache得到上面的这些数据呢?

存储的数据里面有二进制的0,字符串是否会被截断?

其实不会的!

下面进行测试

$mem = new Memcache();

$mem->connect('192.168.0.69',11211);

$memstr= $mem->get('state#105709');

var_dump($memstr);

会得到下面的输出。可以看到 memstr 刚好是53个字节。sessionId有个结束符

string(53) "頊括F>? R!8jWFmsIK41kBDkmlqC7m7QoWICQ8nzz7"

再进一步,我们把数据输出到一个文件,用winhex来查看数据的状态

file_put_contents('./dd.txt',$memstr);

用winhex dd.txt 会看到十六进制数据。

ED9C01000001C0A800463EF60A520000000100386A57466D73494B34316B42446B6D6C7143376D37516F57494351386E7A7A3700

下面我就可以按字节取数据了,主要是利用ord函数获取字节ASCII码

$type = ord($memstr{4});

$state = ord($memstr{5});

$ip = ord($memstr{6}).'.'.ord($memstr{7}).'.'.ord($memstr{8}).'.'.ord($memstr{9});

$ses_long = ord($memstr{19})*16+ord($memstr{18});

//时间戳只需要4个字节,分配了8个字节

$lastactive = ord($memstr{13})*16777216+ord($memstr{12})*65536+ord($memstr{11})*256+ord($memstr{10});

$sessionid = substr($memstr,20,$ses_long);

J2SE 8的输入输出--读取/写入文本文件和读取/写入二进制数据

读取/写入文本文件 // 1. 文本输入 // (1) 短小文本直接转入字符串 String string = new String(Files.readAllBytes(Paths.get(&quo ...

c# word文档与二进制数据的相互转换

最近项目出使用到了将word文档以二进制的方法存到数据库中,并再次读取出二进制数据转换为word文档.最后总结了一下,不多说看示例方法: 代码 , content.Length);           ...

SQLite数据库如何存储和读取二进制数据

SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...

从二进制数据流中构造GDAL可以读取的图像数据

在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

python 读取二进制数据到可变缓冲区中

想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...

前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输

HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...

sqlite3的图片的(二进制数据)存取操作

sqlite3的图片的(二进制数据)存取操作   前言 上篇介绍了sqlite3的一些常用插入操作方法和注意事项,在实际项目中遇到了图片缓存的问题,由于服务器不是很稳定,且受到外界环境的干扰(例如断电 ...

详细解读XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

本文主要参考:MDN 分析并操作 responseXML属性 如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析 ...

转载-python学习笔记之输入输出功能读取和写入数据

读取.写入和 Python 在 “探索 Python” 系列以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如tuple.string 和 list.其他文章讨论了 Pytho ...

随机推荐

atitit.微信项目开发效率慢的一些总结

atitit.微信项目开发效率慢的一些总结 #---理念问题..这个是最大的问题.. 要有专人提升开发效率才好.. #---没有一个好的开发方法体系.... ini deve 法. fell asd+ ...

提高entity framework 性能,要注意哪些事情.

转自:http://www.cnblogs.com/jake1/archive/2013/04/25/3043664.html 我发现现在有不少博友,都反对使用EF框架,说它性能低.其实只要你用的好, ...

poj3519

凡是差分约束系统的题目都是转化为d[j]-d[i]<=w[i,j]的形式然后我们建立边i-->j 边权为w[i,j]对于这道题,要求d[n]-d[1]尽可能的大设d[i]为相对差,d[1] ...

HDU&lowbar;2039——判断三条边是否能组成三角形

Problem Description 给定三条边,请你判断一下能不能组成一个三角形.   Input 输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C.其中A,B,C & ...

移动前端开发之 viewport 的深入理解

移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或响 ...

【IOS开发】SimPholders的使用

推荐一个Xocde开发工具 “SimPholders”,能够快速访问到你的模拟器文件夹,最重要的是完全免费! 官方地址

通过java api统计hive库下的所有表的文件个数、文件大小

更新hadoop fs 命令实现: [ss@db csv]$ hadoop fs -count /my_rc/my_hive_db/* 18/01/14 15:40:19 INFO hdfs.Peer ...

C&num; 删除文件夹

三种方法 1.这种方法简单,能删除文件夹内的所有文件(文件及子目录) DirectoryInfo di = new DirectoryInfo(string Path);         di.Del ...

java工程添加类库

在属性中添加自定义类库 在工程中引入自定义类库

Lua获取当前时间

更多好的文章就在 blog.haoitsoft.com,请大家多多支持! local getTime = os.date(“%c”); 其中的%c可以是以下的一种:(注意大小写) %a abbrevi ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值