将一字符串要保存为二进制文件,又能将二进制文件读还原成这个字符串,该怎么做?

hn48hours 2008-12-19 08:45:04
将一字符串要保存为二进制文件,又能将二进制文件读取出来还原成这个字符串,该怎么做?
...全文
185 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
window_8888 2009-01-20
  • 打赏
  • 举报
回复
考,你加密不就完了.
或者用delphi的zlib对文件进行压缩,读取时再解压,文件内容绝对是乱码.
window_8888 2009-01-20
  • 打赏
  • 举报
回复
考,你加密不就完了.
或者用delphi的zlib对文件进行压缩,读取时再解压,文件内容绝对是乱码.
hn48hours 2009-01-20
  • 打赏
  • 举报
回复
楼上的兄弟,把readhex函数也贴出来吧,谢谢
mdejtod 2008-12-22
  • 打赏
  • 举报
回复
给你一段以前用过的代码,大概 是你说的意思
转换为16进制写入到文件,打开后再读取转换回来

function TFrmMenu.AnsiToUnicode(Ansi: Variant): string; //ANSI转换为 Unicode码
var s:string;
i:integer;
t:widestring;
h,l:byte;
begin
s:='';
t:=widestring(Ansi);
for i:=1 to length(t) do
begin
h:=hi(ord(t[i]));
l:=lo(ord(t[i]));
s:=s+inttohex(h,2)+inttohex(l,2);
end;
Result:=s;
end;

//写入文件
procedure TFrmMenu.WriteBuf(BufTemp: string; Strlen: integer);
var Txtstr:string;
j:integer;
Temp:char;
StreamStr:TMemoryStream;
begin
for j:=0 to Strlen-1 do
begin
if (j mod 2 = 0) or (j=0)then
begin
TxtStr:=copy(BufTemp,j+1,2);
if Txtstr='' then
TxtStr:='00';
Temp:=char(strtoint('$'+TxtStr));
StreamStr.WriteBuffer(Temp,1);
end;
end;
end;

//读取
function GetFileBin(const AFileName: String;OffsetAdd:integer;ReadLength:integer): String;
var
FS: TFileStream;
Str: String;
FByte: Byte;
i: Integer;
begin
if FileExists(AFileName) then
begin
FS := TFileStream.Create(AFileName, fmOpenRead);
if FS.Size > 0 then
begin
FS.Seek(OffsetAdd,soFromBeginning);
for i := 1 to ReadLength do
begin
FS.Read(FByte, 1);
if length(IntToHex(FByte, 1))=1 then
Str := Str + '0' + IntToHex(FByte, 1) +' '
else
Str := Str + IntToHex(FByte, 1) +' ';
end;
end;
FS.Free;
end;
Result := Str;
end;
//转换
function TFrmMenu.UnicodeToAnsi(Unicode: string): Variant;
var s,test:string;
str:Widestring;
i:integer;
j,k:string[2];
Temp: Variant;
begin
i:=1;
s:='';
while i<Length(Unicode)+1 do
begin
j:=Copy(Unicode,i+2,2);
k:=Copy(Unicode,i,2);
i:=i+4;
s:=s+Char(ReadHex(j))+Char(ReadHex(k));
end;
if s<>'' then
s:=WideCharToString(PWideChar(s+#0#0#0#0))
// WideCharToStrVar(PWideChar(s+#0#0#0#0),test)
else
s:='';
str:=s;
Temp := s;
Result:=Temp;
end;
tjg5202 2008-12-22
  • 打赏
  • 举报
回复
楼主原意是想加密解密的吧。。。。。。。。
ZuoBaoquan 2008-12-21
  • 打赏
  • 举报
回复
呵呵,楼主的意思有点像BASE64编码(或其他加密算法)了。

hn48hours 2008-12-20
  • 打赏
  • 举报
回复
我的意思是这样,有一个字符串'aabbcc',将这个字符串写进一个二进制文件中,用记事本打开看到的应该是乱码,然后能从这个二进制文件再能将这个字符串读回来
hn48hours 2008-12-20
  • 打赏
  • 举报
回复
楼上的兄弟,按你的方法保存的文件能用记事本打开看到其中的内容啊
僵哥 2008-12-20
  • 打赏
  • 举报
回复
procedure SaveToFile(const Src: AnsiString;const FileName: AnsiString);
var
memstrm: TMemoryStream;
begin
memstrm := TMemoryStream.Create;
try
memstrm.WriteBuffer(PAnsiChar(Src)^,Length(Src));
memstrm.SaveToFile(FileName);
finally
memstrm.Free;
end;
end;

function ReadFromFile(const FileName: AnsiString): AnsiString;
var
memstrm: TMemoryStream;
begin
memstrm := TMemoryStream.Create;
try
memstrm.LoadFromFile(FileName);
SetString(Result,PAnsiChar(memstrm.Memory),memstrm.Size);
finally
memstrm.Free;
end;
end;
僵哥 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hn48hours 的回复:]
我的意思是这样,有一个字符串'aabbcc',将这个字符串写进一个二进制文件中,用记事本打开看到的应该是乱码,然后能从这个二进制文件再能将这个字符串读回来
[/Quote]
文本文件也是二进制文件。如果你是希望别人读取到的内容不是原始的内容,那就是加密和解密的过程。
de410 2008-12-19
  • 打赏
  • 举报
回复
Private Function B2T(bt() as Byte) as String
Dim strDesc As string
Dim I As Integer
For i=0 to Ubound(bt)
strDesc=strDesc & Rihgt("00" & Hex(bt(i)),2)
Next i
B2T=strDesc
End Function

Private Function T2B(strSrc as string) as Variant
Dim bLen as integer
Dim bt() as byte
Dim i as Integer
bLen=len(strSrc)/2
ReDim bt(bLen-1)
for i=0 to bLen
bt(i)=Val("&H" & Mid(strSrc, i*2, 2))
Next i
T2B=bt
End Sub

16,746

社区成员

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

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