玩了玩 PHP 的 pack/unpack !还是蛮简单的

http://hi.baidu.com/zhangsilly/blog/item/a7db614e27c1abc8d0c86ad5.html

这几天要做双向的加解密,因为加密后的结果都是二进制的,不得不了解一下它了

小try了一把pack/unpack,基本用法还是蛮简单的,下面的例子基本上是给了个做数据库的原型(嘻嘻,不能用PHP5了,只好用PHP4的语法写)

<?php
/**
* 这是一个测试pack/unpack操作的东西
* @author 张心灵
* Email: zhangsilly@gmail.com
*  
* 一下文件存储如下几个字段
* 姓名: 长度 8 字节
* 年龄: unsigned int
* Email: 长度 30 字节
*/

class
Person_Data
{
    
/**
      * 数据库文件路径
      *
      * @var string
      */
    
var $_database = './wps.db'
;
    
/**
      * 打开一个数据库文件
      *
      * @param string $file     数据库文件名
      */
    
function openDb($file = './wps.db'
)
     {
        
$this->_database = $file
;
        
$this->_database = fopen($this->_database, 'ab+'
);
     }
    
/**
      * 向数据库中写入一条记录
      *
      * @param array $data    PHP4真的丑死了
      * @return void
      */
    
function writeRecord($data
)
     {
        
$name = pack('a8', $data['name'
]);
        
$age = pack('S', $data['age'
]);
        
$email = pack('a30', $data['email'
]);
        
fwrite($this->_database, $name . $age . $email
);
     }
    
/**
      * 读取一条记录
      *
      * @param int $count optional default to 0   记录id数
      * @return array
      */
    
function read($count = 0
)
     {
        
rewind($this->_database
);
        
fseek($this->_database, 40 * $count
);
        
$return
= array();
        
$return['name'] = unpack('a8', fread($this->_database, 8
));
        
$return['name'] = $return['name'][1
];
        
$return['age'] = unpack('S', fread($this->_database, 2
));
        
$return['age'] = $return['age'][1
];
        
$return['email'] = unpack('a30', fread($this->_database, 30
));
        
$return['email'] = $return['email'][1
];
         return
$return
;
     }
}

$me = array(    'name' => '张心灵'
,  
                
'age'  => 23
,
                
'email' => 'zhangsilly@gmail.com'
);
$data = new Person_Data
();
$data->openDb('./wps.db'
);
//$data->writeRecord($me);
print_r($data->read(1
));

以上文件运行了两侧,写入了两行记录,最后我读取第二行记录(索引自然从 1 开始)

运行一切正常:

Array
(
     [name] => 张心灵
     [age] => 23
     [email] => zhangsilly@gmail.com
)

==========================================

例子 1

<?php
$data = "PHP";
print_r(unpack("C*",$data));
?>

输出:

Array
(
[1] => 80
[2] => 72
[3] => 80
)

例子 2

<?php
$data = "PHP";
print_r(unpack("C*myint",$data));
?>

输出:

Array
(
[myint1] => 80
[myint2] => 72
[myint3] => 80
)

例子 3

<?php
$bin = pack("c2n2",0x1234,0x5678,65,66);
print_r(unpack("c2chars/n2int",$bin));
?>

输出:

Array
(
[chars1] => 52
[chars2] => 120
[int1] => 65
[int2] => 66
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值