第一步,先把整形变量数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) //低位
纠正一下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即可
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) //低位
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即可
厉害,
对的不用区分正负
然后用逻辑运算可以直接取高低两位了
至于CopyMemory没用过
不作评论
不过yunyu97这么强,
他说的应该可用
至于放在23和24位,那就敷值:
AllData(24)=Myb(0) //高位
AllData(23)=Myb(1) //低位
————————————————————————————
这里应该是
AllData(24)=Myb(1) //高位
AllData(23)=Myb(0) //低位
比如第23,24,25,26位,而且要采用网络字节序该怎么办?
也就是说低字节在前,高字节在后要怎么处理呢?