比如对某一地址的端口,给某位置1,某位置0?

解决方案 »

  1.   

    A and B
    A or B
      

  2.   

    function SetBit(I:integer;Pos:integer;Value:Boolean):integer;
    begin
      if Value then
      begin
        Result:=I or (1 shl (pos-1));
      end else
        Result:=Not(Not I or (1 shl (pos-1)));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(format('SET1=%x,SET0=%x',[SetBit(0,3,True),SetBit($f,3,False)]));
    end;==================================================
    PhotoMark:一款快速图片水印添加工具,支持多个水印同时添加!支持批处理,支持透明水印和半透明水印,支持水印的平铺等等。是您保护图片的利器。 下载地址:
    http://www.skycn.com/soft/9031.html
    http://www.onlinedown.com/photo.htm
    生成的图片示例:
    http://www.ncu94.com/keyzsoft/pm_exam.htm
      

  3.   

    谢谢keyz(),dailin(),按keyz的方法,我今天下午已实现
    我想再问:如果我在里边嵌入汇编呢。。该怎么写。。
    还有:delphi中可不可以直接表示2进制数,类似16进制$F这样表示呢?
    这个问题解决,立马结账
    呵呵,等待各位大虾!
      

  4.   

    汇编里面好像没有直接设置位的操作,也是用And和Or来操作。Delphi中不能直接表示2进制数。可以自己编写函数来实现。
      

  5.   

    用16进制不是照样可以表示2进制吗?可以自己编一个过程
    procedure change(var s1:string):string;
    var i:integer;s2,s3:string;
    begin 
      s3:='';
      For i := 1 to length(s1) do
      begin
        s2:='';
        case s1[i] of
        '0':s2:='0000';
        '1':s2:='0001';
        ......
        'F':s2:='1111';
        end;
        s3:=s3+s2;
      end;
      Result := s3;
    end;
      

  6.   

    我给你举个例子:
    如2的二进制表示为10,如果想对10中的0置为1,可以这样
    const
    a = $01
    var
      i, intresult:Integer
    begin
      i := 2;
      intresult := a or i; 
      Showmessage(IntToStr(intresult));
    end;
    这样intresult就变为3,其中a为十六进制的表示方式,$01二进制为00000001
    a和i进行了位或操作。
    你满意吗,满意就给分