我定义了一个byte数组,要将一个整数转换成固定两个字节的二进制数据放到数组的第23和24位,应该怎么做啊!

解决方案 »

  1.   

    第一步,先把整形变量数N(有正有负)转化为2进制数存放在一个Byte(0 to 1)中
    Dim MyB(1) as byte
    if N>=0 then 
       Myb(0)= N \ 256          //高位
       Myb(1)= N mod 256        //低位
    else
       tmp=N*(-1)
       Myb(0)= tmp \256
       Myb(1)= tmp mod 256
       Myb(0)= Not(Myb(0) and &H80)   //将符号位取反
       Myb(1)= Not(Myb(1)) +1
    //以上两行是先求出正数N的二进制表示方法,然后把最高位置1(这样就是-N的原码了)
    //然后把所有位都取反,末尾+1,这样就是-N的补码形式了,在计算机中负数是补码来存放的。
    end if至于放在23和24位,那就敷值:
    AllData(23)=Myb(0)         //高位
    AllData(24)=Myb(1)        //低位
      

  2.   

    纠正一下Gutta(冯大狂)的做法,首先是可以不用区分正负的。然后就是在计算机种内存种高位应该放在后面。下面的方法适合Integer型,如果是Long型需要更多位的计算。
    Dim MyB(1) as byte
       Myb(1)= (N and &hff00)\&h100          //高位
       Myb(0)= N and &hff        //低位至于放在23和24位,那就敷值:
    AllData(24)=Myb(0)         //高位
    AllData(23)=Myb(1)        //低位还有另外一种更简单直接的方法,就是进行内存拷贝。
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)CopyMemory AllData(23),N,2 '如果是Long型将第3个参数改为4即可
      

  3.   

    yunyu97老兄很强啊
    厉害,
    对的不用区分正负
    然后用逻辑运算可以直接取高低两位了
    至于CopyMemory没用过
    不作评论
    不过yunyu97这么强,
    他说的应该可用
      

  4.   

    '纠正一下我上面写的
    至于放在23和24位,那就敷值:
    AllData(24)=Myb(0)         //高位
    AllData(23)=Myb(1)        //低位
    ————————————————————————————
    这里应该是
    AllData(24)=Myb(1)         //高位
    AllData(23)=Myb(0)        //低位
      

  5.   

    那如果我要将一个整数写到一个BYTE数组的四个位置呢?
    比如第23,24,25,26位,而且要采用网络字节序该怎么办?
    也就是说低字节在前,高字节在后要怎么处理呢?