Mid*_*one 0 vb.net string ascii tcpclient
我正在使用此代码从tcpclient返回一些字符串,但是当字符串返回时,它有一个前导"字符.我正在尝试删除它,但Len()函数是读取字节数而不是字符串本身.我怎么能改变这个来给我字符串的长度,就像我通常使用它而不是字符串本身的数组?
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.'
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Dim LL As Int32 = Len(returndata)
Run Code Online (Sandbox Code Playgroud)
Len() 报告字节数而不是字符串中的字符数.
您的代码目前有些破碎.答案是tcpClient.ReceiveBufferSize,无论您实际收到多少数据- 因为您忽略了返回值networkStream.Read.它可能只返回几个字节,但bytes无论如何你使用数组的其余部分创建一个字符串.始终检查返回值Stream.Read,否则您不知道实际读取了多少数据.你应该做的事情如下:
Dim bytesRead = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.'
Dim returndata As String = Encoding.ASCII.GetString(bytes, 0, bytesRead)
Run Code Online (Sandbox Code Playgroud)
现在,ASCII每个字节总是有一个字符(反之亦然),因此字符串的长度将与您收到的数据的长度完全相同.
请注意,任何非ASCII数据(即超过127的任何字节)都将转换为"?" 通过Encoding.ASCII.GetString.您也可以获得控制角色.这绝对是ASCII文本数据吗?如果不是,我建议使用十六进制编码或使用其他选项以无损方式转储确切数据.