Merge pull request #693 from FJSDS/change_bytes_string

fix unsafe.go
This commit is contained in:
Vladimir Mihailenco 2018-01-15 16:12:18 +02:00 committed by GitHub
commit 041b11eb4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 14 deletions

View File

@ -3,25 +3,20 @@
package internal package internal
import ( import (
"reflect"
"unsafe" "unsafe"
) )
// BytesToString converts byte slice to string.
func BytesToString(b []byte) string { func BytesToString(b []byte) string {
bytesHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b)) return *(*string)(unsafe.Pointer(&b))
strHeader := reflect.StringHeader{
Data: bytesHeader.Data,
Len: bytesHeader.Len,
}
return *(*string)(unsafe.Pointer(&strHeader))
} }
// StringToBytes converts string to byte slice.
func StringToBytes(s string) []byte { func StringToBytes(s string) []byte {
sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) return *(*[]byte)(unsafe.Pointer(
bh := reflect.SliceHeader{ &struct {
Data: sh.Data, string
Len: sh.Len, Cap int
Cap: sh.Len, }{s,len(s)},
} ))
return *(*[]byte)(unsafe.Pointer(&bh))
} }