new package nazastring

pull/2/head
q191201771 5 years ago
parent edfe5cf5fb
commit 444e450e58

@ -0,0 +1,24 @@
package nazastring
import "unsafe"
type sliceT struct {
array unsafe.Pointer
len int
cap int
}
type stringStruct struct {
str unsafe.Pointer
len int
}
func SliceByteToStringTmp(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
func StringToSliceByteTmp(s string) []byte {
str := (*stringStruct)(unsafe.Pointer(&s))
ret := sliceT{array: unsafe.Pointer(str.str), len: str.len, cap: str.len}
return *(*[]byte)(unsafe.Pointer(&ret))
}

@ -0,0 +1,56 @@
package nazastring
import (
"bytes"
"github.com/q191201771/naza/pkg/assert"
"testing"
)
var inbuf = bytes.Repeat([]byte{'1', '2', '3', '4'}, 5678)
var instr = string(inbuf)
func TestSliceByteToStringTmp(t *testing.T) {
str := SliceByteToStringTmp(inbuf)
assert.Equal(t, instr, str)
}
func TestStringToSliceByteTmp(t *testing.T) {
buf := StringToSliceByteTmp(instr)
assert.Equal(t, inbuf, buf)
}
func BenchmarkSliceByteToStringOrigin(b *testing.B) {
var str string
for i := 0; i < b.N; i++ {
str = string(inbuf)
}
assert.Equal(b, instr, str)
}
func BenchmarkSliceByteToStringTmp(b *testing.B) {
var str string
for i := 0; i < b.N; i++ {
str = SliceByteToStringTmp(inbuf)
}
assert.Equal(b, instr, str)
}
func BenchmarkStringToSliceByteOrigin(b *testing.B) {
var buf []byte
for i := 0; i < b.N; i++ {
buf = []byte(instr)
}
assert.Equal(b, buf, inbuf)
}
func BenchmarkStringToSliceByteTmp(b *testing.B) {
var buf []byte
for i := 0; i < b.N; i++ {
buf = StringToSliceByteTmp(instr)
}
assert.Equal(b, buf, inbuf)
}
Loading…
Cancel
Save