玩了玩 PHP 的 pack/unpack !还是蛮简单的
2009-08-06 15:08
701 查看
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
)
==========================================
输出:
输出:
输出:
这几天要做双向的加解密,因为加密后的结果都是二进制的,不得不了解一下它了
小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 )
相关文章推荐
- PHP数据压缩、加解密(pack, unpack)
- php pack、unpack二进制流接口应用实例
- PHP: chr和pack、unpack那些事
- PHP pack unpack 用法
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
- PHP pack() 函数 与 unpack() 函数
- PHP中pack、unpack的详细用法
- PHP中ob_start和pack及unpack
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
- PHP: 深入pack/unpack
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
- php pack与unpack 摸板字符字符含义
- PHP 二进制 pack() unpack()
- PHP: 深入pack/unpack
- PHP数据压缩、加解密(pack, unpack)
- PHP: 深入pack/unpack
- PHP pack和unpack函数详解
- PHP: 深入pack/unpack
- PHP: pack/unpack补遗
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)