3

我一直试图从我的字符串中删除所有零字符

我的字符串是由这些十六进制字节组成的

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 是使用正则表达式替换: http: //msdn.microsoft.com/en-us/library/844skk0h (v=vs.110).aspx

于 2014-05-16T06:09:13.697 回答
5

真正的问题不是空字节,而是首先如何将字节 Ínto a 解码String。你用错了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 回答