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个字节 www.yztrans.com

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

  $sessionid = substr($memstr,20,$ses_long); www.lefeng123.com

php读取memcache二进制数据的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. (第二章第三部分)TensorFlow框架之读取二进制数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...

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

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

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

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

随机推荐

  1. 7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 使用binay log 基于时间点恢复

    7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 使用binay log 基于时间点恢复 7.5.1 Point-in-Tim ...

  2. <<开源硬件创客 15个酷应用玩转树莓派>>

    本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...

  3. 【模拟】HDU 5762 Teacher Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 题目大意: 给n个点,坐标范围0~m(n,m<=105),求是否存在2个点对满足哈夫曼距 ...

  4. yui datatable动态修改行号

    相关函数 getRecord  :YAHOO.widget.Record getRecord ( row ) For the given identifier, returns the associa ...

  5. InstallShield: cannot extract icon with index 0错误解决方案

    在VS2012打包过程中,遇到这个错误,困扰我好几天,后来通过谷歌找到解决方案,如下: Expand the deploy solution (+) on the right panel (Solut ...

  6. OpenStack入门之初步认识

    一.OpenStack 入门 之 基础知识 二.OpenStack 入门 之 基本组件 三.OpenStack 入门 之 各组件解析(基础) 四.OpenStack 入门 之 各组件解析(进阶) 五. ...

  7. svn解决方案汇总

    http://blog.csdn.net/superch0054/article/details/38668017

  8. js给页面加style

    今天做项目时遇到一个问题,我的a.jsp引入了b.jsp,c.jsp也引入了b.jsp,而b.jsp里面的style是根据引入的不同动态改变的(在a.jsp.c.jsp中写js改变).网上找了好多代码 ...

  9. 推荐一款不错的dialog小工具:artDialog

    推荐一款不错的dialog小工具, 地址:http://www.planeart.cn/demo/artDialog/_doc/labs.html 相关介绍例如以下: artDialog是一个基于ja ...

  10. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...