【发布时间】:2016-06-12 21:51:35
【问题描述】:
我从文件中读取字节并处理它们。之后我想保存打包的字节。
将具有混合对象/类型的数组转换为字节字符串的推荐+通用方法是什么?在我的例子中:带有 int 和 string 的数组,包类型 a、C、x。
一个简化的例子:
// $bytes = fread($handle, 100);
$bytes = "437XYZ25.011001DBEFORE ....";
$unpackString = "a3CPN/x8spare/CDSC/x4spare/a32OPT";
$unpacked = unpack($unpackString, $bytes);
var_dump($unpacked);
/*
array(3) {
["CPN"]=> string(3) "437"
["DSC"]=> int(49)
["OPT"]=> string(32) "BEFORE "
}
*/
// example of processing
$unpacked["DSC"] = 12;
$unpacked["OPT"] = "AFTER ";
// pack + write the result
// $packString = "a3x8Cx4a32";
$packTypes = ["a3","x8","C","x4","a32"];
$packFields = [ $unpacked["CPN"], null, $unpacked["DSC"], null, $unpacked["OPT"] ];
// ...
更新:在简化的示例中,我将$packString 替换为$packTypes 和$packFields,以确保清楚哪些内容属于何处以及属于什么类型。
【问题讨论】:
-
有什么问题?你用
unpack解包数组,为什么不能用pack重新打包呢?pack接受参数而不是单个数组这一事实是否存在问题? -
确实如此。如何使用数组打包。