请问Delhpi7如何对每个比特进行操作? ( 积分: 10 )

  • 主题发起人 主题发起人 pshust
  • 开始时间 开始时间
P

pshust

Unregistered / Unconfirmed
GUEST, unregistred user!
举个简单的例子,我陆续抄收到信息,通过中间环节不断写入到文件tmp.dat中。
中间环节就是对tmp.dat的每个比特进行取反运算,如何处理?
 
var
tmpFileStream: TFileStream;
tmpData: array of Byte;
begin
tmpFileStream := TFileStream.Create('c:/tmp.dat', fmOpenReadWrite);
try
SetLength(tmpData, tmpFileStream.Size);
tmpFileStream.Read(tmpData, tmpFileStream.Size);
for i := 0 to Length(tmpData) - 1 do
tmpData := not tmpData;
{ tmpData中就是取反后的数据 }
finally
en;d
end;
 
谢谢楼上,但不是byte
我说的是对bit的操作
把一个文件按0101来处理,通过与某个“01”组合的与运算,生成新的文件
这样说可能更明了了
 
procedure TForm1.Button2Click(Sender: TObject);
var tmpFileStream: TFileStream;
buf:array[0..1]of word;
dst:word;
begin
tmpFileStream := TFileStream.Create('c:/tmp.dat', fmOpenReadWrite);
tmpFileStream.ReadBuffer(buf[0],2);
buf[0]:=0;
dst:=buf[0];
asm
mov ax,dst
not ax
mov &dst,ax
end;
tmpFileStream.WriteBuffer(dst,1);
end;
 
就是如何获得一个字符串每一个对应的bit值?
例如字符串ABCD,总共32个bit,我需要方便知道每个bit的值(是0还是1)。请问如何操作?
能否给出详细的例子,比较着急……
 
给个检查一个字节的(变量为X),多个字节分别判断即可:
var
i: Integer;
begin
for i:=0 to 7 do
begin
if (X and (1 shl i))>0 then //字节X的第i位为1
else //字节X的第i位为0

end;
end;
 
谢谢了,昨天太着急了
后来自己想到了通过
(X shr n) and 1
来获得X的第n位的值,感觉还不错,谢谢大家了
 
殊途同归[:D][:D][:D]
 
后退
顶部