这样的话你就1个Byte1个Byte的取就可以了! ta:array[0..511] of byte;
i,j:integer;
ti:integer;
begin
for i:=0 to 511 do
for j:=7 to 0 do begin
ti:=((1 shl j) and ta[i]) shr j;
end;
end;
//你自己处理一下ti吧
i,j:integer;
ti:integer;
begin
for i:=0 to 511 do
for j:=7 to 0 do begin
ti:=((1 shl j) and ta[i]) shr j;
end;
end;
//你自己处理一下ti吧
算了,我解释一下!
1 shl j就是确定要取1个byte的第几位!如要取第3位那么 1 shl j的值为00001000
将00001000与你要取的数进行与操作就得0000?000 再将?右移过来得0000000?
不是只该位的值了吗?要么1 要么0
是决不可能用地址直接访问到某1个Bit的
// BitSet: 结果,数组,每个元素为0或1,Length(BitSet)取长度
procedure GetBitSet( Buffer: PByte; Count: Integer; var BitSet: TBitSet );
var
i, j, k: Integer;
b: Word; // 取Byte有溢出可能
begin
SetLength( BitSet, Count*8 );
j := 0;
for i:=0 to Count-1 do
begin
b := 1;
for k:=0 to 7 do
begin
BitSet[j] := Ord((b and Buffer^)<>0);
Inc( j );
b := b shl 1;
end;
Inc( Buffer );
end;
end;