从字节中删除NUL字符

Tom*_*ick 21 go

自学Go我正在构建一个简单的服务器,它接受一些输入,进行一些处理,并将输出发送回客户端(包括原始输入).

输入的长度可以从大约5到13个字符+结束线以及客户​​端发送的其他任何guff.

输入被读入字节数组,然后转换为字符串进行某些处理.另一个字符串被附加到此字符串,整个事物被转换回字节数组以发送回客户端.

问题是输入用一堆NUL字符填充,我不知道如何摆脱它们.

所以我可以循环遍历数组,当我找到一个空字符时,记下长度(n),创建一个新长度的字节数组,并将前n个字符复制到新的字节数组并使用它.这是最好的方式,还是有什么东西让我更容易?

一些剥离代码:

data := make([]byte, 16)
c.Read(data)

s := strings.Replace(string(data[:]), "an", "", -1)
s = strings.Replace(s, "\r", "", -1)
s += "some other string"
response := []byte(s)
c.Write(response)
c.close()
Run Code Online (Sandbox Code Playgroud)

此外,如果我在这里做任何其他明显愚蠢的事情,那将很高兴知道.

zzz*_*zzz 45

在包"bytes"中,func Trim(s []byte, cutset string) []byte是你的朋友:

Trim通过切掉cutset中包含的所有前导和尾随UTF-8编码的Unicode代码点来返回s的子切片.

// Remove any NULL characters from 'b'
b = bytes.Trim(b, "\x00")
Run Code Online (Sandbox Code Playgroud)

  • @Knyght:是的,因为,`\ 0`是一个非法的转义序列(查看[specs](http://golang.org/ref/spec#octal_byte_value)).一个人必须使用`\ 000`:http://play.golang.org/p/KP8WLyfUB- (2认同)

Tho*_*ler 5

你的方法听起来基本正确。一些备注:

  1. 当您在 中找到第一个 nul 字节的索引时data,您不需要复制,只需截断切片:data[:idx]

  2. bytes.Index应该能够为您找到该索引。

  3. 还有bytes.Replace所以你不需要转换为字符串。