各位大佬
我在使用winsock控制元件時 通過getdata獲取了一串位元組流 保存在了ByteData陣列中
當我將資料顯示時 redata.Text=ByteData
就變成了亂碼
tcpclient.GetData ByteData, vbByte, bytesTotal
ByteLenght = bytesTotal
redata.Text=ByteData 時顯示亂碼
redata.Text=ByteData(Bytelenght-1)時顯示的是位元組流過來后的單個位元組十進制數
我想顯示一串位元組
比如我接受到了一串位元組流為
30 36 00 21 2F 61 31 49 47 39 5A 50 32 75 50 52 2F 6B 66 62 5F 64 65 6D 6F 2F 75 73 65 72 2F 73 5F 64 61 74 61 2D 31 38 2E 32 39 30 30 30 31 0A 32 2E 39 35 31 31 34 38
我想提取該位元組流的后幾個位元組
32 2E 39 35 31 31 34 38 顯示出來的應該是 2.951148
當我使用
redata.Text=ByteData時是亂碼
使用
redata.Text=ByteData(Bytelenght-1)時顯示的是最后一個位元組 38 對應的顯示出來的是8
uj5u.com熱心網友回復:
1. 可以用strconv來實作位元組陣列與字串的相互轉換;2. 最好可以檢查一下發送資料和接收資料全部內容是否一致;
uj5u.com熱心網友回復:
大佬可否明示一下
我的接收資料部分除了上面那幾行 沒有別的代碼了
uj5u.com熱心網友回復:
給你寫了個簡單的轉換方法:
Option Explicit
Private Sub Form_Load()
Dim arrByte(8) As Byte
arrByte(0) = &H32
arrByte(1) = &H2E
arrByte(2) = &H39
arrByte(3) = &H35
arrByte(4) = &H31
arrByte(5) = &H31
arrByte(6) = &H34
arrByte(7) = &H38
Dim strMsg As String
strMsg = StrConv(arrByte, vbUnicode)
MsgBox strMsg
End Sub
運行示例:
uj5u.com熱心網友回復:
十分感謝大佬的分享!
我現在把程式改成了這樣子
Private Sub tcpclient_DataArrival(ByVal bytesTotal As Long)
ReDim ByteData(bytesTotal)
tcpclient.GetData ByteData, vbByte, bytesTotal
ByteLenght = bytesTotal
Dim arrByte(8) As Byte
arrByte(0) = ByteData(ByteLenght - 8)
arrByte(1) = ByteData(ByteLenght - 7)
arrByte(2) = ByteData(ByteLenght - 6)
arrByte(3) = ByteData(ByteLenght - 5)
arrByte(4) = ByteData(ByteLenght - 4)
arrByte(5) = ByteData(ByteLenght - 3)
arrByte(6) = ByteData(ByteLenght - 2)
arrByte(7) = ByteData(ByteLenght - 1)
Dim strMsg As String
strMsg = StrConv(arrByte, vbUnicode)
redata.Text = strMsg
End Sub
我運行時他提醒我下標越界 這個是怎么一回事鴨。。
我把游標放到bytesTOtal上時 它提醒我說bytesTotal=4
所以Bytelenght也就等于4了
當我試著把強制改變bytelenght為一固定長度陣列時還是提醒我下標越界
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
1.可以用回圈;2.發送的資料可能不足8個位元組;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/21795.html
標籤:VB基礎類
上一篇:vb搜索圖片
下一篇:求一段vb代碼,初學者謝謝
