3

文字列からすべてのゼロ文字を削除しようとしています

私の文字列はこれらの 16 進数のバイトから作られています

00 44 00 65 00 6C 00 70 00 68 00 69

すべての文字の前にゼロ バイト (ヌル バイト) があります。これらのゼロのないテキストを取得するには、ある種の Unicode エンコーディングまたはワイド エンコーディングを使用する必要があると推測していました。

しかし、私はそれを理解できなかったので、最善の方法は置換を使用することだと考えましたが、それでも失敗します。

Dim packet() As String = {&H0, &H44, &H0, &H65, &H0, &H6C, &H0, &H70, &H0, &H68, &H0, &H69}
Dim str As String = Encoding.ASCII.GetString(packet, 0, 12)
str = str.Replace("\0", "")  'Compiles and fails
str = str.Replace(\0, "")  'No compile
str = str.Replace('\0', "")  'No compile
4

3 に答える 3

8

Microsoft.Visualbasic 名前空間に依存しないものが必要な場合:

str = str.Replace(Convert.ToChar(0),"")

私が考えることができるString.Replaceを使用する唯一の代替手段は、正規表現の置き換えを使用することです:

于 2014-05-16T06:09:13.697 に答える
5

本当の問題は null バイトではなく、そもそもバイトを aStringにデコードする方法にあります。間違った を使用していEncodingます。Encoding.BigEndianUnicodeの代わりに使用する必要がEncoding.ASCIIあります。ヌルはデコードプロセスによって処理されるため、手動で置き換える必要はまったくありません。

Dim packet() As Byte = {&H0, &H44, &H0, &H65, &H0, &H6C, &H0, &H70, &H0, &H68, &H0, &H69}
Dim str As String = Encoding.BigEndianUnicode.GetString(packet)
于 2014-05-19T04:03:36.420 に答える
3

解決した

 str = str.Replace(vbNullChar, "")

関数に依存しない組み込み関数でこれを行う方法をまだ探していReplaceます

于 2014-05-16T05:28:50.990 に答える