【发布时间】:2016-09-29 11:24:59
【问题描述】:
我有一个来自 IBM 大型机源的 EBCDIC 编码数据文件,需要对其进行解析并转换为 ASCII。我能够通过以十六进制读取每个字节来进行转换,并在 ASCII 上查找相应的匹配项。
我的问题是 EBCDIC 编码的文件有 30 个字节被打包,需要解包以获得实际值。我正在尝试使用 PHP 打包/解包函数以及 Perl 的方法,但没有找到运气。我得到的价值似乎不是我正在寻找的确切价值。我试着用 C c H h N 解压它。
假设该文件包含一个 EBCDIC 编码数据; 包字段位于位置 635-664,30 字节长 数据1 = 9 字节 数据2 = 9 字节 数据3 = 3 字节 data4 = 3 字节 数据 5 = 3 个字节 data6 = 3 个字节
PHP:
$datafile = fopen("/var/www/data/datafile", "rb");
$regebcdicdata = fread($datafile, 634);
$packfields = fread($datafile, 30);
$arr= unpack('c9data1/c9bdata2/c3data3/C3data4/C3data5/C3data6',$packfields);
print_r($arr);
珀尔:
打开我的 $fh, '<:raw c9 c3>更新: 已经找到了解决办法。这 30 个字节以指定的格式打包。所以我只是使用PHP解包函数解包。
用于 EBCDIC 转换。我按字节读取它,使用 bin2hex() 函数获取十六进制值,找到匹配的 ASCII 十六进制值并获取 ASCII 表示,以便用户可以使用 chr() 函数以可读格式查看它。
【问题讨论】:
-
你需要包含数据,否则没有人可以为你尝试。您还应该包括您已经尝试过的实际代码。 Edit 问题并添加。
-
出于保密原因,我无法包含这些数据。不过,我可以给你我在 Perl 和 PHP 中都使用过的代码。