进制转换

coreblood 2003-06-07 09:17:46
A1 A1 20 0D 0A A1 A1 0D 0A

有一文本文件其前面的一段16进制字符串如上

如何对这段字符串进行操作 修改 删除 ?
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
coreblood 2003-06-09
  • 打赏
  • 举报
回复
度取和以十六进制显示文件
read a binary file and display the byte values as ASCII?
author:P.Below



type

TDisplayProc = procedure(const s: string) of object;

procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);

implementation

 

procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);

var

line: string[80];

i: Cardinal;

p: PChar;

nStr: string[4];

const

posStart = 1;

binStart = 7;

ascStart = 57;

HexChars: PChar = '0123456789ABCDEF';

begin

p := @Data;

line := '';

for i := 0 to Count - 1 do

begin

if (i mod 16) = 0 then

begin

if Length(line) > 0 then

DispProc(line);

FillChar(line, SizeOf(line), ' ');

line[0] := Chr(72);

nStr := Format('%4.4X', [i]);

Move(nStr[1], line[posStart], Length(nStr));

line[posStart + 4] := ':';

end;

if p[i] >= ' ' then

line[i mod 16 + ascStart] := p[i]

else

line[i mod 16 + ascStart] := '.';

line[binStart + 3 * (i mod 16)] := HexChars[(Ord(p[i]) shr 4) and $F];

line[binStart + 3 * (i mod 16) + 1] := HexChars[Ord(p[i]) and $F];

end;

DispProc(line);

end;

 

procedure TForm1.Display(const S: string);

begin

Memo1.Lines.Add(S);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

ms: TMemoryStream;

begin

if Opendialog1.Execute then

begin

ms := TMemoryStream.Create;

try

ms.LoadFromfile(OpenDialog1.FileName);

ShowBinary(ms.Memory^, ms.Size, Display);

finally

ms.Free

end;

end;

end;



nyf1220 2003-06-07
  • 打赏
  • 举报
回复
我看了看,用16进制做了做(ultraedit)
A---41,1---31,中间的空格是---20,2-----32,0----30,D----44,等等,看来就是16进制吧
bluecyclone 2003-06-07
  • 打赏
  • 举报
回复
学习!~
fontain 2003-06-07
  • 打赏
  • 举报
回复
A1 A1仿佛是汉字
fontain 2003-06-07
  • 打赏
  • 举报
回复
是文本文件吗?不是吧,0D 0A是换行,20是空格,你试试二进制文件存取吧
coreblood 2003-06-07
  • 打赏
  • 举报
回复
var
file1:Tstrings;
i:integer;
begin
file1:=Tstringlist.Create;
file1.LoadFromFile(filename);
assignfile(txtfile,filename);
rewrite(txtfile);
for i:=0 to file1.Count-1 do
begin
if trim(file1.Strings[i])<>'' then
writeln(txtfile,file1.strings[i]);
end;
closefile(txtfile);
file1.Free;




我用以上的一段程序去除文本文件里面的多余的空行

对于一般的空行可以去掉但是有一些是去不掉的

具体的16进制的代码如上

如何操作?
coreblood 2003-06-07
  • 打赏
  • 举报
回复



问题是我做为字符串来操作的时候

它在文本文件里面显示是 2个换行

根本没有东西
蓝色光芒 2003-06-07
  • 打赏
  • 举报
回复
当一般的字符串操作就是了,没有什么不妥啊,或者用pchar来操作吧。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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