You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下将D-Fend Reloaded二进制DAT文件转ASCII文本方法

问题:将MS-DOS应用的二进制数据库文件转换为纯文本

我有一个基于D-Fend Reloaded开发的MS-DOS应用,其数据库存储在DATABASE01.DAT文件中。在Ubuntu终端用file命令检测结果:

DATABASE01.DAT: application/octet-stream; charset=binary

尝试执行以下命令提取数据:

cat DATABASE01.DAT | tr -d '\0' | head -1 

得到的部分数据存在乱码(显示为�),且无法确定字段分隔符(看似是14个空格长度):

AAA                     362887637       �   �       FEDERES                            ATTIVI 309                                 FAUSH                  �6Cat

执行hexdump -C DATABASE01.DAT得到的十六进制片段:

00000000  50 49 45 52 49 4e 49 20  49 4f 4c 45 20 20 20 20  |AAA    |
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000020  20 39 34 30 31 34 32 36  31 20 20 20 20 20 20 20  | 362887637       |
00000030  06 00 02 00 7b 07 14 00  08 00 ca 07 07 00 09 00  |....{...........|
00000040  ca 07 20 20 20 20 20 20 20 50 45 52 55 47 49 41  |..       FEDERES|
00000050  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  |                |

需要将该文件转换为可读的纯文本文件。


分析

从十六进制输出可判断,这是固定长度的二进制记录文件:

  • 部分字段是ASCII字符串(补空格到固定长度),比如前16字节的文本字段、数字字符串字段
  • 中间夹杂二进制数值(如06 00是小端16位整数,对应十进制6),这些非打印字符被tr -d '\0'处理后变成乱码�

解决方法

1. 快速提取可读文本

使用strings命令自动过滤二进制内容,只保留可打印字符串:

strings -n 3 DATABASE01.DAT

-n 3参数用于过滤掉零散的空格,只提取长度≥3的有效文本片段。

2. 替换乱码为空格

如果需要保留字段结构,用sed把所有非打印字符替换为空格:

cat DATABASE01.DAT | sed 's/[^[:print:]]/ /g' | head -1

处理后乱码会被替换成空格,方便识别字段分隔。

3. 完整解析固定长度记录(需要精准字段定义)

若要完整提取所有数据(包括二进制数值),需先确定每个记录的总长度和各字段的字节位置:

  • 先通过更多hexdump输出确认单条记录的字节长度(比如从一个字段起始到下一个同类型字段起始的间隔)
  • 用Python解析二进制字段,示例代码(需根据实际字段位置调整):
with open('DATABASE01.DAT', 'rb') as f:
    # 假设单条记录为64字节,可根据实际调整
    while record := f.read(64):
        # 提取第一个字符串字段(前16字节,转ASCII并去除末尾空格)
        field1 = record[:16].decode('ascii').strip()
        # 提取二进制数值(第48-49字节,小端16位整数)
        num_field = int.from_bytes(record[48:50], byteorder='little')
        # 提取第二个字符串字段(第56-72字节)
        field2 = record[56:72].decode('ascii').strip()
        # 用制表符分隔输出为纯文本
        print(f"{field1}\t{num_field}\t{field2}")

内容的提问来源于stack exchange,提问作者cccnrc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:55:26