0

このコードを使用して 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()文字列の文字数ではなく、バイト数を報告します。

4

5 に答える 5

5

あなたのコードは現在やや壊れています。答えは、実際にtcpClient.ReceiveBufferSize受信したデータの量に関係なく、からの戻り値を無視しているためです。ほんの数バイトを返す可能性がありますが、とにかく配列の残りの部分を使用して文字列を作成しています。の戻り値を常に確認してください。そうしないと、実際に読み取られたデータの量がわからないためです。次のようなことをする必要があります。networkStream.ReadbytesStream.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は常に1バイトあたり1文字(およびその逆)であるため、文字列の長さは、受信したデータの長さとまったく同じになります。

非ASCIIデータ(つまり、127を超えるバイト)はすべて「?」に変換されることに注意してください。によってEncoding.ASCII.GetString。制御文字を取得することもできます。これは間違いなくASCIIテキストデータですか?そうでない場合は、16進エンコードするか、他のオプションを使用して、損失のない方法で正確なデータをダンプすることをお勧めします。

于 2009-06-17T05:30:06.670 に答える
0

ここで何かが足りないかもしれませんが、何が問題になっていString.Lengthますか?

Dim LL As Int32 = returndata.Length
于 2009-06-17T05:24:34.540 に答える
0

Len() の呼び出し内の文字列をトリミングしてみてください。

Dim LL As Int32 = Len(returndata.Trim())
于 2009-06-17T04:52:30.990 に答える
0

Len がバイト数を報告し、それが文字数と一致しない場合、次の 2 つの可能性が考えられます。

  • 思ったよりも多くの文字が送信されています (つまり、余分な文字が実際に送信されています)。

  • エンコーディングは ASCII ではないため、文字ごとに複数のバイトが存在する可能性があります (そのうちの 1 つは「奇妙な」文字であり、送信されている文字であり、「間違ったデータ」ではありません)。データが本当に ASCII エンコードされているかどうかを確認してください。そうでない場合は、それに応じて呼び出しを変更してください。

于 2009-06-17T05:09:14.030 に答える
0

私があなたを正しく読むと、最初に単一引用符が付きますよね?

一貫してそれを取得する場合、文字列の長さから1を差し引いてみませんか? または、2 番目の文字の部分文字列を使用します。

Len(returndata.Substring(1)

そして、「文字列自体の長さではなく、通常使用する文字列の長さ」の意味がよくわかりません。あなたは文字列を持っています。その文字列を内部的に表す可能性のある配列は、完全に実装依存であり、表示または依存する必要はありません。それとも、ここであなたを誤解していますか?弦普段使っているものです。つまり、それがあなたのやり方でないなら、それを処理したの文字列の長さを、通常使用するものに変換してみませんか?

于 2009-06-17T05:09:54.263 に答える