DWORD ByteIndex;
BYTE     BitNumber;
PBYTE    pANDBits;  pANDBits[ByteIndex] |= (1<<BitNumber);  pANDBits[ByteIndex] &= ~(1<<BitNumber);谁能把上面两条语句转化为Pascal语句,立马给分!
拜托:请在delphi下试一下,通过了再答

解决方案 »

  1.   

    BitNumber := 1 shl BitNumber;
    pANDBits[ByteIndex] = pANDBits[ByteIndex] or BitNumber;
    BitNumber := 1 shl BitNumber;
    pANDBits[ByteIndex] = pANDBits[ByteIndex] and (not BitNumber);
      

  2.   

    //参考如下代码~~//var
    //  pANDBits: array[0..N] of Byte; //建议声明成静态的数组~~
    begin
    //...
      pANDBits[ByteIndex] := pANDBits[ByteIndex] or (1 shl BitNumber);
      pANDBits[ByteIndex] := pANDBits[ByteIndex] and ($FF xor (1 shl BitNumber));
    //...
    end;
      

  3.   

    To: tigerhohoo(老虎不吃人)
    pANDBits不是数组类型,语法检查都通不过C太灵活了
      

  4.   

    To: zswangII(伴水清清)(职业清洁工) 我不想转化pANDBits的类型,因为它其实是本函数的一个参数,我为了演示才写在函数体内。
      

  5.   

    刚才弄错了这个应该是正确的.
    var
        ByteIndex : DWORD;
        BitNumber : BYTE;
        pANDBits :  PBYTE;
        tmpBit   : BYTE;
        test : array[0..10] of BYTE;
        pANDBitsArray : PByteArray;
    begin
      ByteIndex := 2;
      test[2] := 101;
      BitNumber := 1;
      pANDBits := @test[0];
      pANDBitsArray := ADDr(pANDBits^);
      tmpBit := 1 shl BitNumber;
      pANDBitsArray^[ByteIndex] := pANDBitsArray^[ByteIndex] or tmpBit;
      tmpBit := 1 shl BitNumber;
      pANDBitsArray^[ByteIndex] := pANDBitsArray^[ByteIndex] and (not tmpBit);
      ShowMessage(IntToStr(integer(pANDBitsArray^[ByteIndex])));
    end;
      

  6.   

    如果你不想改变pANDBits的类型,就用位操作把其他的位去掉,然后付给一个BYTE类型的变量,再与1<<BitNumber进行运算。
     pANDBits[ByteIndex] |= (1<<BitNumber);    ——>>
    var
    ByteIndex :DWORD;
    BitNumber:BYTE;
    pANDBits:PBYTE;
    pBit:BYTE;
    n:Cardinal;
    beginn := pAndBits^;
    n := (ByteIndex -1) shl n;
    n:= n shr (32 - ByteIndex);
    pBit := n;
    pBit := pBit or (1 shl BitNumber);end;
      

  7.   

    //...
      PByteArray(pANDBits)^[ByteIndex] := PByteArray(pANDBits)^[ByteIndex] or (1 shl BitNumber);
      PByteArray(pANDBits)^[ByteIndex] := PByteArray(pANDBits)^[ByteIndex] and ($FF xor (1 shl BitNumber));
    //...
      

  8.   

    var
        ByteIndex:DWord
        BitNumber:Byte;
        pANDBits:PByte;  PByteArray(pANDBits)[ByteIndex]:=PByteArray(pANDBits)[ByteIndex] or (1 shl BitNumber);  PByteArray(pANDBits)[ByteIndex]:=PByteArray(pANDBits)[ByteIndex] and not (1 shl BitNumber);