You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TCP/IP接收ASCII转十六进制加括号显示异常问题求助

问题分析与解决代码

你的代码存在几个关键问题,导致输出不符合预期:

  • 不可打印的ASCII控制字符(比如0x07、0x05)转成字符串时会被替换成?,再转十六进制就会变成3F,完全丢失了原始字节的真实信息。
  • 你先把转换后的乱码字符串赋值给TextBox3,随后又循环追加转换后的十六进制值,导致结果是原始乱码加错误的十六进制内容,自然出现??75这类异常输出。
  • 直接用ReceiveBufferSize创建数组会读取大量空字节(0x00),后续处理会引入无效内容。

修正后的代码直接操作读取到的原始字节,避免转字符串丢失信息:

If TCPClientStream.DataAvailable = True Then
    Dim rcvbytes(TCPClientz.ReceiveBufferSize - 1) As Byte
    ' 记录实际读取的字节数,只处理有效数据
    Dim bytesRead As Integer = TCPClientStream.Read(rcvbytes, 0, rcvbytes.Length)
    
    Dim result As New StringBuilder()
    For i As Integer = 0 To bytesRead - 1
        ' 把每个字节转成两位十六进制,大写/小写可按需调整
        Dim hexStr As String = rcvbytes(i).ToString("X2")
        result.Append($"[{hexStr}]")
    Next
    
    TextBox3.Text = result.ToString()
End If

代码说明:

  • 用bytesRead记录实际读取的字节数,跳过数组中未被使用的空字节,只处理有效数据。
  • 直接操作原始字节,不会丢失控制字符信息,0x07会被正确转为07,0x05转为05。
  • 使用StringBuilder拼接字符串,比直接操作TextBox.Text效率更高,避免多次字符串拼接的性能损耗。
  • ToString("X2")保证每个字节转为两位十六进制格式,避免出现单字符的十六进制(比如0x07不会显示成7)。

内容的提问来源于stack exchange,提问作者Ranjan Sapkota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:48:18