问题是:
1、10进制的数 如5100 如何转换成两字节的十六进制数 13EC
2、通过下位机发送出去这样一组10进制数 5100 2300 4500 ,如何转换成16进制数组 13EC 08FC 1194 这样的格式发送出去?

解决方案 »

  1.   

    Option Explicit
    Private Sub Form_Load()
        MsgBox Hex(5100)
    End Sub
      

  2.   

    Option Explicit
    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
      

  3.   

    Hex 函数
          返回代表十六进制数值的 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。
      

  4.   

    可能大家没有明白我的意思
    例如:
    从上位机VB中输入text1.text=5100  text2.text=2300  text3.text=4500
    通过16进制转换
    根据通信协议
    发送给下位机的数据是: 01 13EC 08FC 1194    01是命令指令 
    通过hex(text)转换出来的数据不对 
    请问怎么转换?单字节的好办,现在是双字节16进制数。
    注意,是字节不是字符串
    谢谢大家的回复
      

  5.   


    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
    ......
      

  6.   

    Private Sub Form_Load()
    Text1.Text = 5100
    s = Hex(Text1.Text)
    s = Val("&H" & s)
    MsgBox sEnd Sub
      

  7.   


    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
      

  8.   

    Option Explicit
        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