首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

串口通信发送、接收16进制数据为何不能正常显示

2012-01-09 
求教:串口通信发送、接收16进制数据为何不能正常显示?MSComm1.InputMode 1 接收二进制数据MSComm1.Input

求教:串口通信发送、接收16进制数据为何不能正常显示?
MSComm1.InputMode = 1 ' 接收二进制数据
  MSComm1.InputLen = 0 ' 一次读取缓冲区内所有数据
'发送数据
  Dim sendData() As Byte  
  sendData() = TextSend.Text '比如输入0077
   
  MsgBox sendData '测试数据正确性,显示0077
  MsgBox UBound(sendData) '查看数据占多少字节,这里就不对了,显示为7,不理解,16进制的0077不应该占2个字节吗?
  MsgBox sendData(0) '查看第1字节数据,本来希望显示00,可实际显示为48
  MsgBox sendData(1) '查看第2字节数据,本来希望显示77,可实际显示为0
   
  MSComm1.Output = sendData '送到串口发送
'接收数据
  Dim receiveData() As Byte  
  Dim HC
  receiveData() = MSComm1.Input
  MsgBox receiveData '测试数据正确性,显示0077
  MsgBox UBound(receiveData) '仍然显示为7
  MsgBox receiveData(0) '仍然显示为48
  MsgBox receiveData(1) '仍然显示为0
  HC = receiveData(0) * 256 + receiveData(1) '先转换为10进制整数,0077的10进制本应是119,可实际显示为12288,很离谱
  TextReceive.Text = Hex(HC) '再把这个整数转换成16进制字符显示,希望显示0077,可实际显示为3000,完全不对

我的本意是输入一个16进制字符串,然后串口以16进制发送,另一台机器以16进制接收,然后显示出来的仍是16进制的字符串,应该跟输入的一模一样。不知道我有没有讲明白,还请高手赐教!多谢了



[解决办法]

你混淆了字符 ASCII 码和实际数值的概念。

'sendData() = TextSend.Text 

Redim sendData(Len(txtSend) \ 2 - 1)

For i = 0 To Ubound(sendData)
sendData(i) = Val("&H" & Mid(txtSend, i * 2 + 1, 2))
Next i
[解决办法]

VB code
Dim txtSend As StringDim sendData() As ByteDim i As Long            txtSend = TextSend.TextRedim sendData(Len(txtSend) \ 2 - 1) For i = 0 To  Ubound(sendData)     sendData(i) = Val("&H" & Mid(txtSend, i * 2 + 1, 2)) Next i 

热点排行