Private Declare Function MemCpy Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) As Boolean Private Declare Function htonl Lib "wsock32.dll" (ByVal hostlong As Long) As Long'---------------------------------------------------------------- Private Const OFFSET_4 = 4294967296# Private Const MAXINT_4 = 2147483647 Private Const OFFSET_2 = 65536 Private Const MAXINT_2 = 32767Public Function UnsignedToLong(value As Double) As Long If value < 0 Or value >= OFFSET_4 Then Error 6 ' Overflow If value <= MAXINT_4 Then UnsignedToLong = value Else UnsignedToLong = value - OFFSET_4 End If End FunctionPublic Function UnsignedToInteger(value As Long) As Integer If value < 0 Or value >= OFFSET_2 Then Error 6 ' Overflow If value <= MAXINT_2 Then UnsignedToInteger = value Else UnsignedToInteger = value - OFFSET_2 End If End FunctionPublic Function FmtHex(A As Byte) As String FmtHex = Right("00" + Hex(A), 2) End FunctionPrivate Sub Command1_Click() Dim sData(3) As Byte UnsignedToLong (Val(Text5.Text)) MemCpy sData(0), htonl(UnsignedToLong(Val(Text5.Text))), 4 Text1.Text = FmtHex(sData(0)) Text2.Text = FmtHex(sData(1)) Text3.Text = FmtHex(sData(2)) Text4.Text = FmtHex(sData(3)) End Sub
Dim strHex As String
Dim j As Long
t = 1800000
strHex = Hex(t)
strHex = String(8 - Len(strHex), "0") & strHex
For j = 1 To 4
'把这句改成把各个值赋给数组元素
MsgBox Val(Mid(strHex, (j * 2) - 1, 2))
Next
byte1 = (Val(StrHex) and 3)
byte1 = (Val(StrHex) and 12)
byte1 = (Val(StrHex) and 48)
byte1 = (Val(StrHex) and 172)
要本不需要用mid 之类的函数
那个方法行得通,可我想找更简洁的
Private Declare Function htonl Lib "wsock32.dll" (ByVal hostlong As Long) As Long'----------------------------------------------------------------
Private Const OFFSET_4 = 4294967296#
Private Const MAXINT_4 = 2147483647
Private Const OFFSET_2 = 65536
Private Const MAXINT_2 = 32767Public Function UnsignedToLong(value As Double) As Long
If value < 0 Or value >= OFFSET_4 Then Error 6 ' Overflow
If value <= MAXINT_4 Then
UnsignedToLong = value
Else
UnsignedToLong = value - OFFSET_4
End If
End FunctionPublic Function UnsignedToInteger(value As Long) As Integer
If value < 0 Or value >= OFFSET_2 Then Error 6 ' Overflow
If value <= MAXINT_2 Then
UnsignedToInteger = value
Else
UnsignedToInteger = value - OFFSET_2
End If
End FunctionPublic Function FmtHex(A As Byte) As String
FmtHex = Right("00" + Hex(A), 2)
End FunctionPrivate Sub Command1_Click()
Dim sData(3) As Byte
UnsignedToLong (Val(Text5.Text))
MemCpy sData(0), htonl(UnsignedToLong(Val(Text5.Text))), 4
Text1.Text = FmtHex(sData(0))
Text2.Text = FmtHex(sData(1))
Text3.Text = FmtHex(sData(2))
Text4.Text = FmtHex(sData(3))
End Sub
MemCpy sData(0), htonl(UnsignedToLong(Val(Text5.Text))), 4
Text1.Text = FmtHex(sData(0))
Text2.Text = FmtHex(sData(1))
Text3.Text = FmtHex(sData(2))
Text4.Text = FmtHex(sData(3))
现在我不知道你要发送的什么内容,是字节数组呢,还是字符?
当为&H1b的时候,你用byte1 = val(&H1b)得到的是1(它把b不当数字过滤掉了,而我希望byte1 能为&H1b,你的代码还需要修改
我要当成字节数组发出去
怎么把一个byte分为高低两个字节,赋值给另外两个byte
比如byte1 = &Hd3
怎么把byte2 = &Hd
byte3 = &H3