github.com/wangkui503/aero@v1.0.0/Unsafe.go (about)

     1  package aero
     2  
     3  import (
     4  	"reflect"
     5  	"unsafe"
     6  )
     7  
     8  // BytesToStringUnsafe converts a byte slice to a string.
     9  // It's fast, but not safe. Use it only if you know what you're doing.
    10  func BytesToStringUnsafe(b []byte) string {
    11  	bytesHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    12  	strHeader := reflect.StringHeader{
    13  		Data: bytesHeader.Data,
    14  		Len:  bytesHeader.Len,
    15  	}
    16  	return *(*string)(unsafe.Pointer(&strHeader))
    17  }
    18  
    19  // StringToBytesUnsafe converts a string to a byte slice.
    20  // It's fast, but not safe. Use it only if you know what you're doing.
    21  func StringToBytesUnsafe(s string) []byte {
    22  	strHeader := (*reflect.StringHeader)(unsafe.Pointer(&s))
    23  	bytesHeader := reflect.SliceHeader{
    24  		Data: strHeader.Data,
    25  		Len:  strHeader.Len,
    26  		Cap:  strHeader.Len,
    27  	}
    28  	return *(*[]byte)(unsafe.Pointer(&bytesHeader))
    29  }