...
1
16
17 package base64x
18
19 import (
20 `reflect`
21 `unsafe`
22 )
23
24 func mem2str(v []byte) (s string) {
25 (*reflect.StringHeader)(unsafe.Pointer(&s)).Len = (*reflect.SliceHeader)(unsafe.Pointer(&v)).Len
26 (*reflect.StringHeader)(unsafe.Pointer(&s)).Data = (*reflect.SliceHeader)(unsafe.Pointer(&v)).Data
27 return
28 }
29
30 func str2mem(s string) (v []byte) {
31 (*reflect.SliceHeader)(unsafe.Pointer(&v)).Cap = (*reflect.StringHeader)(unsafe.Pointer(&s)).Len
32 (*reflect.SliceHeader)(unsafe.Pointer(&v)).Len = (*reflect.StringHeader)(unsafe.Pointer(&s)).Len
33 (*reflect.SliceHeader)(unsafe.Pointer(&v)).Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data
34 return
35 }
36
37 func mem2addr(v []byte) unsafe.Pointer {
38 return *(*unsafe.Pointer)(unsafe.Pointer(&v))
39 }
40
41
42
43
44
45
46
47
48 func noEscape(p unsafe.Pointer) unsafe.Pointer {
49 x := uintptr(p)
50 return unsafe.Pointer(x ^ 0)
51 }
52
View as plain text