mirror of https://github.com/q191201771/naza
new package nazastring
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…
Reference in New Issue