delphi 用record结构读取记录文件的问题

TXT内容16进制格式如下01AA02AAAA03AAAAAA......我要用record一次性读取,请问该record如何定义??这是一个加密txt文件,里面的内容按... TXT内容16进制格式如下
01 AA 02 AA AA 03 AA AA AA... ...
我要用record一次性读取,请问该record如何定义??
这是一个加密txt文件,里面的内容按标志位读取的。
用WinHex打开

02 3D 3E 04 23 44 DF 2E
第一字节02是长度,后面读取2字节是密文,然后04又是长度,后面4字节又是密文。

现在我要用Record结构读取该文件,请问该Record结构如何定义?
我觉得可能是这样:
MyRecord=Record
case i:integer of
$02: (n:string[02]);
$04: (m:string[04]);
end;
但是有255种可能。肯定不是这个方式。
展开
 我来答
syht2000
高粉答主

2013-02-19 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
不清楚你最终目的,如果只是为了保存这个内容,其实这个问题用record数组,还是用变长二维数组都是一样的,比如说有一个变长二维数组
B: Array Of Array Of Integer;
你就从这个txt第一个字节开始挨个读(或者一次读入后从第一个字节开始),比如说有一个n用于密文条数的统计,m为每条密文字节数。
基本上就如下流程

1.读入02,2存入m
2.n加1
3.SetLength(B, n); SetLength(B[n], m);
4.读入m个字节到B[n-1][0]至B[n-1][m-1] //二维是这么写的吧,delphi好多年不用了。
5.再次循环直接结束

这样得到的就是一个形如
3D 3E
23 44 DF 2E

这样的一个锯齿状二维数组
当然,如果用record的话(比如说你要存储更多的信息,比如每条数据长度,明文等等),你也完全可以将上面的每一行信息存入一个record中,最终得到的是一个record数组。
追问
谢谢你的回答,你理解的非常好。密文是字符串,标识是int。而且是好几百条,我觉得还是用Record读文件好,就是不知道这个变长的Record怎么定义?
追答
没区别吧,一样的
type
someInfo=Record
info : string; //明文
buffer: array of byte; //密文变长数组
//你自己想加入的其它信息
End;

这是用来存单条数据的,全部的数据放数组
infoList:array of someinfo;
没实际测试过不知道行不行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
RedBaronVIP
2013-02-19 · TA获得超过1147个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:242万
展开全部
这是典型的文本文件,啥时候成记录文件了。直接当字符串读出来不就行了,然后再对字符串进行处理。
procedure TForm1.Button1Click(Sender: TObject);
var
fn, s: string;
f: TextFile;
i: Integer;
begin
fn := 'hex.txt';
AssignFile(f, fn);
Reset(f);
Read(f, s);
CloseFile(f);
for i := 1 to Length(s) do
if s[i] in ['0'..'9', 'A'..'Z', 'a'..'z'] then
{ 你爱怎么处理就怎么处理 }
end;
更多追问追答
追问
谢谢你回答,怪我没说清楚。请看补充后的提问。
追答
这问题极度小儿科。不过Delphi的文件操作函数处理这类问题就是一坨屎,我拿API给你写吧。
另外,把一段一段的密文取出来之后,你是要把密文连成串还是保持一段一段的状态?确认了我好写代码。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式