summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2021-05-05 16:39:22 +0300
committerValery Piashchynski <[email protected]>2021-05-05 16:39:22 +0300
commit4fa94bb7f73a705293c2afd40fc1151a3aaa04e2 (patch)
tree6ffd858cade87600bbd4432f70db22f50c598db0 /utils
parent9ee78f937d5be67058882dd3590f89da35bca239 (diff)
- Initial broadcast commit
Signed-off-by: Valery Piashchynski <[email protected]>
Diffstat (limited to 'utils')
-rw-r--r--utils/convert.go34
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
+}