String 是否仍然可以在Go中创建以null结尾的字符串?
是否仍然可以在Go中创建以null结尾的String 是否仍然可以在Go中创建以null结尾的字符串?,string,go,c-strings,String,Go,C Strings,是否仍然可以在Go中创建以null结尾的字符串 我目前正在尝试的是a:=“golang\0”,但它显示了编译错误: non-octal character in escape sequence: " 引号之间的文本构成文本的值,反斜杠转义按其所在位置进行解释(除非\'是非法的,\“是合法的),具有相同的限制。三位八进制(\nnn)和两位十六进制(\xnn)转义符表示结果字符串的单个字节;所有其他转义符表示单个字符的(可能是多字节)UTF-8编码 因此\0是非法序列,必须使用3个八进制数字:
字符串
我目前正在尝试的是a:=“golang\0”
,但它显示了编译错误:
non-octal character in escape sequence: "
引号之间的文本构成文本的值,反斜杠转义按其所在位置进行解释(除非\'
是非法的,\“
是合法的),具有相同的限制。三位八进制(\nnn
)和两位十六进制(\xnn
)转义符表示结果字符串的单个字节;所有其他转义符表示单个字符的(可能是多字节)UTF-8编码
因此\0
是非法序列,必须使用3个八进制数字:
s := "golang\000"
或使用十六进制代码(2个十六进制数字):
或unicode序列(4个十六进制数字):
例如:
s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s) // prints "hello\x00"
输出:全部以0代码字节结束(在上尝试)
另一个选项是
ByteSliceFromString
函数:
package main
import (
"fmt"
"golang.org/x/sys/windows"
)
func main() {
b, e := windows.ByteSliceFromString("golang")
if e != nil {
panic(e)
}
fmt.Printf("%q\n", string(b)) // "golang\x00"
}
s += string(rune(0))
例如:
s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s) // prints "hello\x00"
如果需要,请使用
0
指令完成您的工作。请参阅:.NUL在字符串中转义为\x00
。此外,该语言不提供以NUL结尾的字符串,因此..是的,您必须修改每个字符串。
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s) // prints "hello\x00"