我使用这个代码返回一些串从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)

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)

现在,ASCII每个字节总是有一个字符(反之亦然),因此字符串的长度将与您收到的数据长度完全相同。

请注意,任何非ASCII数据(即超过127的任何字节)都将转换为“?”通过 Encoding.ASCII.GetString 。您也可以获得控制角色。这绝对是ASCII文本数据吗?如果不是,我建议使用十六进制编码或使用其他选项以无损方式转储确切数据。

其他提示

您可以尝试修改Len()调用中的字符串:

Dim LL As Int32 = Len(returndata.Trim())

如果莱恩报告的数字并不匹配的数字,然后我可以想到的两种可能性:

  • 有更多的文字发送比你想象的(即,额外的字实际上是被送)

  • 编码不是ASCII,因此有可能被超过一个字节每char(其中之一是那个'奇怪的性格,这是正在发送并不是'是错误的数据').尝试找出如果数据是真的ASCII编码,如果不改变的话。

当我正确读到你时,你会在开头有一个引号,对吗?

如果你一直得到那个,为什么不从字符串长度中减去一个呢?或者使用第二个字符的子字符串:

Len(returndata.Substring(1)

而且我不太明白你的意思»字符串的长度,正如我通常使用它而不是字符串本身的数组«。你有一个字符串。任何可能在内部表示该字符串的数组都完全依赖于实现,您应该看到或依赖的任何内容。或者我在这里弄错了。字符串您正常使用的内容。我的意思是,如果那不是你做的,那么为什么不把之后的字符串的长度加工成你通常使用的东西?

也许我在这里遗漏了一些东西,但 <代码> string.length减

Dim LL As Int32 = returndata.Length
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top