CmdHead与DEFUSE_CONNECT都是WORD,也就是都是Integer的吧,那还何必转成DWORD? 要把Integer放到Byte数组里可以用CopyMemory Dim b(1) As Byte Dim iNum As Integer CopyMemory b(0),ByVal iNum,2
同上//我把这个buff转换回来就出错了,因为在MSDN中Integer 变量以带符号的 16 位(2 个字节)整数形式存储。你用strconv转换当然不行(它是转化字串的函数,即使你用了clng,它也还是会隐式将数字转化为字串,这是产生错误的原因)一个解决的办法是进行内存复制,用CopyMemory另一个解决的办法是用位运算: Option ExplicitPrivate Sub Command1_Click() Dim buff() As Byte buff = IntToByteArray(3456) MsgBox buff(0) MsgBox buff(1) End SubPrivate Function IntToByteArray(ByVal num As Integer) As Byte() Dim buff(1) As Byte buff(0) = num \ 2 ^ 8 '右移8位,得高位 buff(1) = num And 255 '取低位 IntToByteArray = buff End Function
VC的DWORD类型在VB中声明为Long
dim iNum as integer
dim buff(2) as Byte
iNum = 11
buff = StrConv(CLng(iNum ), vbFromUnicode)转换后的BYTE数组是:
buff(0) = "49" 1的asc码
buff(1) = "49" 1的asc码我把这个buff转换回来就出错了,因为在MSDN中Integer 变量以带符号的 16 位(2 个字节)整数形式存储。
请教如何转换成BYTE,然后再转换回来
Debug.Print iNum
func(byval clng(UERDEF_Connect),....)
或者把你的常量声明变成
Public Const UERDEF_Connect As Long= &HA011
或
Public Const UERDEF_Connect= &HA011&
然后调用
func(byval UERDEF_Connect,....)
CopyMemory((PWORD)&CmdHead,(PVOID)&pOverlappedEx->buf[0],sizeof(WORD));
if(CmdHead == DEFUSE_CONNECT)
{
//比较是否是这个命令,然后处理。。
}
要把Integer放到Byte数组里可以用CopyMemory
Dim b(1) As Byte
Dim iNum As Integer
CopyMemory b(0),ByVal iNum,2
Option ExplicitPrivate Sub Command1_Click()
Dim buff() As Byte
buff = IntToByteArray(3456)
MsgBox buff(0)
MsgBox buff(1)
End SubPrivate Function IntToByteArray(ByVal num As Integer) As Byte()
Dim buff(1) As Byte
buff(0) = num \ 2 ^ 8 '右移8位,得高位
buff(1) = num And 255 '取低位
IntToByteArray = buff
End Function