diff options
author | Valery Piashchynski <[email protected]> | 2021-05-13 20:15:00 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2021-05-13 20:15:00 +0300 |
commit | e1ff9daead5033b537296ffb071e551b95af91ab (patch) | |
tree | c3755967c7c40a05f12d81d1f7043ccc0bc3da0c /utils | |
parent | 705b69631dc91323c64a19594dcfeca06ea4fa5a (diff) | |
parent | 1dd0db287da4106d99578338ea252004def788a9 (diff) |
#671 fix(static): revert static pluginv2.2.1
#671 fix(static): revert static plugin
Diffstat (limited to 'utils')
-rw-r--r-- | utils/convert.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/utils/convert.go b/utils/convert.go new file mode 100644 index 00000000..8d153ce5 --- /dev/null +++ b/utils/convert.go @@ -0,0 +1,34 @@ +package utils + +import ( + "reflect" + "unsafe" +) + +// AsBytes returns a slice that refers to the data backing the string s. +func AsBytes(s string) []byte { + // get the pointer to the data of the string + p := unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&s)).Data) + + var b []byte + hdr := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + hdr.Data = uintptr(p) + // we need to set the cap and len for the string to byte convert + // because string is shorter than []bytes + hdr.Cap = len(s) + hdr.Len = len(s) + + return b +} + +// AsString returns a string that refers to the data backing the slice s. +func AsString(b []byte) string { + p := unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&b)).Data) + + var s string + hdr := (*reflect.StringHeader)(unsafe.Pointer(&s)) + hdr.Data = uintptr(p) + hdr.Len = len(b) + + return s +} |