这样的话你就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吧

解决方案 »

  1.   

    我需要取出每一位二进制的bit即可。如何取?
      

  2.   

    我写的代码不是很清楚了吗?
    算了,我解释一下!
    1 shl j就是确定要取1个byte的第几位!如要取第3位那么 1 shl j的值为00001000
    将00001000与你要取的数进行与操作就得0000?000 再将?右移过来得0000000?
    不是只该位的值了吗?要么1 要么0
      

  3.   

    能直接从内存地址里取bit吗?
      

  4.   

    内存地址的最小单位就是Byte了,(我说的是地址)
    是决不可能用地址直接访问到某1个Bit的
      

  5.   

    TBitSet = array of Byte;// Buffer: 内存地址,Count: 字节数,
    // 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;