我一直在尝试从字符串中删除所有零字符

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


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

最佳答案

真正的问题不是空字节,而是首先如何将字节解码为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)

10-08 02:07