整数转换二进制的问题!

bafenghan 2005-03-26 02:44:26
我定义了一个byte数组,要将一个整数转换成固定两个字节的二进制数据放到数组的第23和24位,应该怎么做啊!
...全文
242 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bafenghan 2005-05-27
  • 打赏
  • 举报
回复
高手们指点指点啊!
yuxian1125 2005-05-27
  • 打赏
  • 举报
回复
你知道怎么转换吗?
我先调用系统时间,然后要把它转换成二进制发送,是不是要先把时间转换成整数再转换成二进制?
yuxian1125 2005-05-27
  • 打赏
  • 举报
回复
怎么把系统时间转换成二进制?
bafenghan 2005-05-27
  • 打赏
  • 举报
回复
没有人知道吗??
bafenghan 2005-05-27
  • 打赏
  • 举报
回复
那如果我要将一个整数写到一个BYTE数组的四个位置呢?
比如第23,24,25,26位,而且要采用网络字节序该怎么办?
也就是说低字节在前,高字节在后要怎么处理呢?
bafenghan 2005-05-27
  • 打赏
  • 举报
回复
没有一个人知道啊??
在线等待啊!
sticklee 2005-03-27
  • 打赏
  • 举报
回复
yunyu97老兄很强啊
厉害,
对的不用区分正负
然后用逻辑运算可以直接取高低两位了
至于CopyMemory没用过
不作评论
不过yunyu97这么强,
他说的应该可用
yunyu97 2005-03-27
  • 打赏
  • 举报
回复
纠正一下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即可
yunyu97 2005-03-27
  • 打赏
  • 举报
回复
'纠正一下我上面写的
至于放在23和24位,那就敷值:
AllData(24)=Myb(0) //高位
AllData(23)=Myb(1) //低位
————————————————————————————
这里应该是
AllData(24)=Myb(1) //高位
AllData(23)=Myb(0) //低位
itcoco 2005-03-26
  • 打赏
  • 举报
回复
mark
wumylove1234 2005-03-26
  • 打赏
  • 举报
回复
高.顶!
Gutta 2005-03-26
  • 打赏
  • 举报
回复
第一步,先把整形变量数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) //低位

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧