在Go语言中,将字符串(string)转换为字节切片([]byte)是一个常见的操作。这可以通过标准方式或者强转换方式来实现。下面是关于这两种方法的详细解释和示例代码。 1. 标准方式 标准方式是最常用且推荐的方式,它利用Go语言内置的转换功能,直接通过类型转换表达式来实现。这种方式简单明了,且符合Go语言的惯例。 go pack...
Pointer(&bh)) } func Bytes2String(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } 性能对比 既然有两种转换方式,那么我们有必要对它们做性能对比。 // 测试强转换功能 func TestBytes2String(t *testing.T) { x := []byte("Hello Gopher!") y := Bytes2String(x) z := ...
}//test result//String to bytes://0 s= ptr(v)=0x51bd70 ptr(StringBytes(v)=0x51bd70 ptr([]byte(v)=0xc042021c58//1 s= ptr(v)=0x51bd70 ptr(StringBytes(v)=0x51bd70 ptr([]byte(v)=0xc042021c58//2 s=hello ptr(v)=0x51c2fa ptr(StringBytes(v)=0x51c2fa ptr([]byte(v...
fmt.Println(bytes2string2(bs)) } func bytes2string1(bs []byte) string { return string(bs) } func bytes2string2(bs []byte) string { return *(*string)(unsafe.Pointer(&bs)) } 第一种转换也是一个非常标准的转换方式,第二个方式使用了不安全的做法。 String、rune 相互转换 String to rune f...
[]byte转换成struct 上面是结构体转成了字节数组对吧,然后我们将生成的字节数组转换成结构体,同时也可以验证前面的转换是否正确: var mystruct *Info = *(**Info)(unsafe.Pointer(&data)) fmt.Printf("%#v,%#v,%#v,%#s\n", mystruct, mystruct.data, mystruct.data2, mystruct.data3) ...
string与[]byte经常需要互相转化,普通转化会发生底层数据的复制。如果是临时使用的字符串可以通过unsafe包直接转化数据,不需要内存拷贝 这种方法有需要注意的地方,...
可以通过两个方法由string得到byte,第一个是: 注意到,这里的G既不是""双引号又不是``这种go里面字符串引起来的,而是普通的单引号。 第二种方法是: 这种曲折的方法,先转成[]byte,然后再取第一个。
2 编译程序:go build -gcflags "-m -l -N",其中-l -N禁止了一切优化;编译成功后用gdb加载程序查看string和[]byte的数据结构;这里如果不熟悉gdb的指令请查找相关资料充电。3 转换后 [ ]byte 底层数组与原 string 内部指针并不相同(前者为0xc420057f30后者为0x469ca8),以此可确定数据被复制。ptype的...
var buf bytes.Buffer buf.WriteString("Hello ") buf.Write([]byte{'W', 'o', 'r', 'l', ...