通过winsock接收到了16进制的数据,系统给转成了字符串,我现在就是要把他每一位转成10进制的数,请问我该如何解决?

解决方案 »

  1.   

    一、字节数组转换为字符串
    dim bTemp() As Byte
    dim sData as String
    '接收数据到bTemp中 .....
    '然后:
    sData = StrConv(bTemp, vbUnicode, &H804)二、字符串转换为字节数组
    bTemp= StrConv(sData , vbFromUnicode)
      

  2.   

    谢谢 兔子!
    不过对那个&H804,我还不是很清楚,MSDN上面写的我也看不太懂,请您指教一下!
      

  3.   

    &H804我也不知是什么具体含义。好像
    sData = StrConv(bTemp, vbUnicode, &H804)或
    sData = StrConv(bTemp, vbUnicode)都行,不过一般都用第一种,反正我公司这么用都正常。例如在窗体的textbox(txtCom2Send)中输入一堆16进制数(2个字母[/数字]一组,中间用空格或逗号分隔),然后点发送按钮,代码示例如下:
    Dim bSucceed As Boolean
    Dim bytSend() As Byte
    '十六进制发送
    bSucceed = funHexToString(txtCom2Send.Text, bytSend())Public Function funHexToString(strHex As String, bytResult() As Byte) As Boolean
      Dim i As Integer
      Dim bufHex As String
      Dim iLen As Integer, iLength As Integer
      Dim byteTemp As Byte
      Dim lStr As String, hStr As String
      Dim iHightHex As Integer, iLowHex As Integer
      Dim hightAsc As Integer, lowAsc As Integer
      Dim iHexData As Integer
      Dim iByt As Integer
      funHexToString = False
      iByt = 0
      bufHex = Trim(strHex)
      iLen = Len(bufHex)
      If iLen = 0 Then Exit Function
      
      For i = 0 To iLen - 1
        iLength = Len(bufHex)
        byteTemp = Asc(Left(bufHex, 1))
        '不符合: (<0 or >9) and (<a or >f)  'vbBinaryCompare
        If ((byteTemp < 48 Or byteTemp > 57) And _
          (byteTemp < 97 Or byteTemp > 102) And _
          (byteTemp < 65 Or byteTemp > 70)) Then
             bufHex = Right(bufHex, iLength - 1)
        Else
          If iLength > 1 Then
              iHightHex = funCharToHex(byteTemp)  '高位
              byteTemp = Asc(Mid(bufHex, 2, 1))
              '符合:
              i = i + 1
              If ((byteTemp > 48 And byteTemp < 57) Or _
                (byteTemp > 97 And byteTemp < 102) Or _
                (byteTemp > 65 And byteTemp < 70)) Then
                  
                  iLowHex = funCharToHex(byteTemp)  '低位
                  iHexData = iHightHex * 16 + iLowHex
                  If UBound(bytResult) < iByt Then
                      'Preserve :使现有元素的值不丢失!
                      ReDim Preserve bytResult(UBound(bytResult) + 1)
                  End If
                  bytResult(iByt) = iHexData
                  iByt = iByt + 1
                  funHexToString = True '本次调用funHexToString()进行发送
              Else
                '回退一个值(因为无法凑成双字节进行发送!)
                If UBound(bytResult) > 0 Then
                    ReDim Preserve bytResult(UBound(bytResult) - 1)
                End If
              End If
              bufHex = Right(bufHex, iLength - 2)
              'funHexToString = True
        End If
        
        End If
      Next i
      
    End FunctionPublic Function funCharToHex(b1 As Byte) As Integer
      If (b1 >= 48 And b1 <= 57) Then
        funCharToHex = CInt(Chr(b1))
      ElseIf (b1 >= 97 And b1 <= 102) Then
            funCharToHex = b1 - 97 + 10
      ElseIf (b1 >= 65 And b1 <= 70) Then
            funCharToHex = b1 - 65 + 10
      End If
    End Function