怎样将字符串中的数字转换为二进制数并进行存储?!--全部家当就40分了 (40分)

C

cjh_xf

Unregistered / Unconfirmed
GUEST, unregistred user!
如果str是字符串,其中存放有大量的0、1数字,怎样将这些数字变成二进制并进行存储?
注意:字符串中的0、1按每八个组成一个byte,顺序下去,不足补0;存储也是存放于二进制文件中。
//////////////////////////////////////////////////////////////
 
uses
math;
...
var
i:integer;
str:string;//假设只有八位。如果超过八位您把他分割开。
d:integer;
begin
d:=0;
for i:=1 to Length(Str) do begin
d:=d+Trunc(IntPower(2,i-1));
end;
//您保存d就可以了。
end;
 
您的思路是正确的,但表达式是否应为:
d:=d+Trunc(IntPower(2,i-1))*StrToInt(Str);
请指教!
另:存储d应该怎样完成?用文本文件可以吗?谢谢。
 
用BYTE转换不可以吗?
 
先将字符串补0规格化成8的倍数位,
然后每8位转成一个char
建立一个文件流,将每个char 写入流。
最后将流保存!
 
大侠们:
原理我是懂的,但我编的程序总有逻辑错误!我在字符串处理方面很少有顺利的:(
哪位大侠编一段给我see,感激不尽,愿意再奉送50分!!!谢谢谢谢!!!
 
随手写的,没有调试,你试一试:

function BinToByte(s: string): Integer;
var
Len, i: Integer
begin
Len := Length(s);
if Len < 8 then
begin
SetLength(s, 8);
for i := Len + 1 to 8 do
s := '0';
end;

Result := 0;
for i := 1 to 8 do
Result := Result * 2 + StrToIntDef(s, 0);
end;

procedure SaveData(str: string
FileName: string);
var
tmpStr: string;
i: string;
Stream: TMemoryStream;
Data: Byte;
begin
Stream := TMemoryStream.Create;
for i := 0 to Length(str) div 8 do
begin
tmpStr := Copy(str, 1, 8)
// 取出前 8 个字符
Delete(str, 1, 8)
// 删除前 8 个字符
Data := BinToByte(tmpStr)
// 将 8 个字符组成的 0 1 串变为 字节型
Stream.Write(Data, 1)
// 写入一个字节
end;
Stream.Position := 0;
Stream.SaveToFile(FileName);
Stream.Free;
end;

 
谢谢beta,有空我一定试试你的程序,我已经搞掂了!
var
InFile,OutFile:TextFile;
Str,StrToWrt:String;
I,J,N,Count,Rec,Sum:Integer;
B:Byte;
C:Char;
begin
SetLength(Str,1024);
AssignFile(InFile,'D:/DELPHI/DataForCh.txt');
AssignFile(OutFile,'D:/DELPHI/ResultData.txt');
try
ReSet(InFile);
ReWrite(OutFile);
//
While not Eof(InFile) do
begin
Readln(InFile,Str);
N:=Length(Str);
Count:=Trunc(N div $8);
SetLength(StrToWrt,Count+1);
Rec:=N mod $8;
//补零
if Rec<>0 then
begin
Rec:=$8-Rec;
for I:=1 to Rec do
Str:=Str+'0';
Count:=Count+1;
end;
//每次取8个字符
for I:=0 to Count-1 do
begin
Sum:=0;
for J:=1 to 8 do
//完成转换和存储
begin
Sum:=Sum+Trunc(IntPower(2,J-1))*StrToInt(Str[I*8+J]);
end;
B:=Byte(Sum);
C:=Chr(B);
StrToWrt[I+1]:=C;
end;
Writeln(OutFile,StrToWrt);
end;
finally
CloseFile(InFile);
CloseFile(OutFile);
end;
Close;
end;
 
多人接受答案了。
 
顶部