用文件流读取文件内16进制的数据怎么才能一次读取一个区间的数据?如6A~6E!

xu19834 2009-02-19 10:22:58
用文件流读取文件内16进制的数据怎么才能一次读取一个区间的数据?如6A~6E!
下面是根据别人指导写的代码 但是只能做到在edit上显示6E一个位置的数据,如何做到
显示一个区间的数据如显示6A~6E数据!

function StrToHexStr(const S:Ansistring):Ansistring;
var
I:Integer;
begin
for I:=1 to Length(S) do
begin
if I=1 then
Result:=Ansistring(IntToHex(Ord(S[1]),2))
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
fs : TFileStream;
bt : array[0..1023] of Char;
begin
fs := TFileStream.Create('c:\1k.org',fmOpenRead );
try
fs.Position := $6E;
fs.ReadBuffer(bt,1);
edit1.Text := StrToHexStr(bt);
finally
FreeAndNil(fs);
end;
end;
...全文
85 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kampan 的回复:]
华仔有两个大大的牌牌(勋章)!真牛啊,呵呵~~~
[/Quote]

改天送你個。呵呵
kampan 2009-02-19
  • 打赏
  • 举报
回复
华仔有两个大大的牌牌(勋章)!真牛啊,呵呵~~~
kampan 2009-02-19
  • 打赏
  • 举报
回复
按照我上边改的试试
kampan 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xu19834 的回复:]
看了 不是不可见的字符
是不是这个的问题
function StrToHexStr(const S:Ansistring):Ansistring;
var
I:Integer;
begin
for I:=1 to Length(S) do
begin
if I=1 then
Result:=Ansistring(IntToHex(Ord(S[1]),2))
end;
end;

而且我不是很明白这里的作用!
[/Quote]
function StrToHexStr(const S:Ansistring):Ansistring;
var
i: integer;
NewData: string;
begin
NewData := '';
for I:=1 to Length(S) do
begin
NewData := NewData + Ansistring(IntToHex(Ord(S[I]),2))
end;
Result := NewData;
end;
xu19834 2009-02-19
  • 打赏
  • 举报
回复
哦明白了 就是
function StrToHexStr(const S:Ansistring):Ansistring;
var
I:Integer;
begin
for I:=1 to Length(S) do
begin
if I=1 then
Result:=Ansistring(IntToHex(Ord(S[1]),2))
end;
end;


问题 谢谢各位!!
starluck 2009-02-19
  • 打赏
  • 举报
回复



function StrToHexStr(const S:Ansistring):Ansistring;
var
I:Integer;
begin
for I:= 0 to Length(S)-1 do
begin
Result:= Result + Ansistring(IntToHex(Ord(S[i]),2))
end;
end;


kampan 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xu19834 的回复:]
bt : array[0..1023] of Char;
长度够 但是
fs.Position := $6E;
fs.ReadBuffer(bt,$6E-$6A);
还是只显示 一个数据 就是6E的!
[/Quote]

两种情况:1、你读的数据('c:\1k.org')本身就一个字节数据6E
2、数据存储的为二进制文件,所以有很多不可显示的字符,你可以用UltraEdit打开看看
估计第二种的可能性大!
xu19834 2009-02-19
  • 打赏
  • 举报
回复
看了 不是不可见的字符
是不是这个的问题
function StrToHexStr(const S:Ansistring):Ansistring;
var
I:Integer;
begin
for I:=1 to Length(S) do
begin
if I=1 then
Result:=Ansistring(IntToHex(Ord(S[1]),2))
end;
end;

而且我不是很明白这里的作用!
starluck 2009-02-19
  • 打赏
  • 举报
回复


是不是另外一部分是不可見的一些字符啊。 你有十六進制的工具打開看下。或者讀下其它地方的數據看下。
xu19834 2009-02-19
  • 打赏
  • 举报
回复
bt : array[0..1023] of Char;
长度够 但是
fs.Position := $6E;
fs.ReadBuffer(bt,$6E-$6A);
还是只显示 一个数据 就是6E的!
kampan 2009-02-19
  • 打赏
  • 举报
回复
fs.ReadBuffer(bt,你要的区间长度($6E-$6A));
bdmh 2009-02-19
  • 打赏
  • 举报
回复
fs.Position := $6E;
fs.ReadBuffer(bt,$6E-$6A);

bt的长度要能容纳你得区间长度
starluck 2009-02-19
  • 打赏
  • 举报
回复

A,B,c,d,E ==?

呵呵 ,那你fs.ReadBuffer(bt,?);

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧