问题是:
1、10进制的数 如5100 如何转换成两字节的十六进制数 13EC
2、通过下位机发送出去这样一组10进制数 5100 2300 4500 ,如何转换成16进制数组 13EC 08FC 1194 这样的格式发送出去?
1、10进制的数 如5100 如何转换成两字节的十六进制数 13EC
2、通过下位机发送出去这样一组10进制数 5100 2300 4500 ,如何转换成16进制数组 13EC 08FC 1194 这样的格式发送出去?
Private Sub Form_Load()
MsgBox Hex(5100)
End Sub
Private Sub Form_Load()
Dim str As String, a As Variant, i As Integer
Dim strOut As String, strI As String
str = "5100 2300 4500"
a = Split(str, " ")
For i = LBound(a) To UBound(a)
strI = CStr(Hex(CInt(a(i))))
strI = fixstr(strI)
strOut = strOut + " " + strI
Next i
MsgBox strOut
End Sub
Private Function fixstr(str As String) As String
Dim i As Integer
i = Len(str)
Select Case i
Case 0
fixstr = "0000"
Case 1
fixstr = "000" & str
Case 2
fixstr = "00" & str
Case 3
fixstr = "0" & str
Case 4
fixstr = str
Case Else
fixstr = "0000"
End Select
End Function
返回代表十六进制数值的 String。语法Hex(number)必要的 number 参数为任何有效的数值表达式或字符串表达式。说明如果 number 还不是一个整数,那么在执行前会先被四舍五入成最接近的整数。如果 number 为 所得为
Null Null
Empty 零 (0)
任何其他的数字 最多可到八个十六进制字符。
适当范围内的数字,前缀以 &H,可以直接表示十六进制数字。例如,十六进制表示法的 &H10 代表十进制的 16。
Hex 函数示例
本示例使用 Hex 函数来得到某数值的 16 进制值。Dim MyHex
MyHex = Hex(5) ' 返回 5。
MyHex = Hex(10) ' 返回 A。
MyHex = Hex(459) ' 返回 1CB。
例如:
从上位机VB中输入text1.text=5100 text2.text=2300 text3.text=4500
通过16进制转换
根据通信协议
发送给下位机的数据是: 01 13EC 08FC 1194 01是命令指令
通过hex(text)转换出来的数据不对
请问怎么转换?单字节的好办,现在是双字节16进制数。
注意,是字节不是字符串
谢谢大家的回复
Dim send(6) As Bytesend(0) = 1
send(1) = val(text1)\256
send(2) = val(text1) And 255
send(3) = val(text2)\256
send(4) = val(text2) And 255
......
Text1.Text = 5100
s = Hex(Text1.Text)
s = Val("&H" & s)
MsgBox sEnd Sub
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub CmdSend_Click()
Dim a As Integer
Dim Buffer(1) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 2
MSComm1.Output = Buffer
End Sub
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim a As Integer
Dim Buffer(1) As Byte
Dim send_Byt(6) As Byte
Private Sub sendByt()
CopyMemory Buffer(0), a, 2
End SubPrivate Sub Command1_Click()
send_Byt(0) = &H1
a = Val(Text1)
sendByt
send_Byt(1) = Buffer(1)
send_Byt(2) = Buffer(0)
a = Val(Text2)
sendByt
send_Byt(3) = Buffer(1)
send_Byt(4) = Buffer(0)
a = Val(Text3)
sendByt
send_Byt(5) = Buffer(1)
send_Byt(6) = Buffer(0)
MSComm1.Output = send_Byt
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
Text1 = 5100
Text2 = 2300
Text3 = 4500
End Sub