加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 文件的十六进制视图

发布时间:2020-12-15 09:44:54 所属栏目:大数据 来源:网络整理
导读:我正在使用Delphi 2009. 我想在备忘录中查看文件(十六进制)的内容. 我正在使用此代码: var Buffer:String;begin Buffer := ''; AssignFile(sF,Source); //Assign file Reset(sF); repeat Readln(sF,Buffer); //Load every line to a string. TempChar:=StrT
我正在使用Delphi 2009.

我想在备忘录中查看文件(十六进制)的内容.

我正在使用此代码:

var
  Buffer:String;
begin
  Buffer := '';
  AssignFile(sF,Source); //Assign file
  Reset(sF); 
  repeat
    Readln(sF,Buffer); //Load every line to a string.
    TempChar:=StrToHex(Buffer); //Convert to Hex using the function
    ...
  until EOF(sF);
end;

function StrToHex(AStr: string): string;
var
I,Len: Integer;
s: chr (0)..255;
//s:byte;
//s: char;
begin
  len:=length(AStr);
  Result:='';
  for i:=1 to len  do
  begin
    s:=AStr[i];

    //The problem is here. Ord(s) is giving false values (251 instead of 255)
    //And in general the output differs from a professional hex editor.

    Result:=Result +' '+IntToHex(Ord(s),2)+'('+IntToStr(Ord(s))+')';
  end;
  Delete(Result,1,1);
end;

当我将变量“s”声明为char(我知道char最多为255)时,我得到的结果十六进制值高达65535!

当我将变量“s”声明为字节或chr(0).. 255时,它会输出不同的十六进制值,与任何十六进制编辑器相比!

这是为什么?我怎样才能看到正确的值?

检查图像的差异.

第1张图片:Professional Hex Editor.

第二张图像:功能输出到备忘录.

?

谢谢.

解决方法

在Delphi 2009中,Char与WideChar是一样的,即Unicode字符.宽字符占用两个字节.你想使用AnsiChar.在Delphi 2009之前(即在Unicode Delphi之前),Char和AnsiChar是一样的.

此外,您不应该使用ReadLn.您将文件视为具有文本文件行结尾的文本文件!这是一般文件!它可能根本没有任何文本文件行结尾!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读