【发布时间】:2015-11-02 21:24:58
【问题描述】:
我必须阅读一些 MS-DOS 程序使用的遗留数据文件。其中大部分都非常简单,但我无法确定一种数据类型; 一个代表整数的 6 字节序列。
一些例子:
+-----+-------------------+
| num | bytes as hex |
+-----+-------------------+
| 0 | 00 00 00 00 00 00 |
| 1 | 80 7b 14 ae 47 61 |
| 2 | 80 20 d0 91 7b 14 |
| 3 | 80 20 d0 92 5c d0 |
| 4 | 80 20 d0 92 7b 14 |
| 5 | 80 20 d0 93 5c d0 |
| 6 | 80 20 d0 93 d0 bb |
| 7 | 80 20 d0 93 7a 14 |
| 8 | 80 20 d0 93 09 e2 |
| 9 | 80 20 d0 94 d1 9b |
| 10 | 80 20 d0 94 14 d0 |
| 16 | 84 48 e1 7a 14 7e |
| 20 | 85 0a d7 a3 70 1d |
| 32 | 86 ec 51 b8 1e 20 |
| 48 | 86 86 eb 51 b8 40 |
| 73 | 87 00 00 00 00 12 |
| 100 | 87 00 00 00 00 48 |
| 130 | 88 00 00 00 80 01 |
+-----+-------------------+
有人知道这是什么类型格式吗?
了解可能有用的事情:
- 文件格式来自 MS-DOS 时代(准确地说是 1994 年);
- 文件格式在其他任何地方都没有使用特殊类型;
- 将第一个字节的值增加一通常会使数值翻倍;
- (其他)字节和整数通常是有符号的。
非常欢迎任何帮助!
快速更新
上面的例子显示了一个字节序列,这里表示为十六进制值,从文件中剪切并粘贴到这里。我确信字节序列是用来表示一个数字的,因为我可以在 MS-DOS 程序中更改数值、保存到文件并比较结果。
读取和写入数据
为了从二进制形式读取和写入 48 位实数,您可以查看:
PHP: Convert double to Pascal 6-byte (48 bits) real format
【问题讨论】:
-
这个表是等价/查找表?所以
int 1等于80 7b 14 ae 47 61? -
不,它不是查找表,而是某种数据格式。
-
文件中是这样的吗?我不确定我在看什么。这是文件的确切内容,还是您根据数据构建的?
-
@BurhanKhalid,问题已更新并澄清。