12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package yu_fast
- import (
- "unsafe"
- )
- // B2S
- //
- // @Description: 在没有内存分配的情况下将字节片转换为字符串
- func B2S(b []byte) string {
- return *(*string)(unsafe.Pointer(&b))
- }
- type sliceHeader struct {
- data uintptr
- len int
- cap int
- }
- type stringHeader struct {
- data uintptr
- len int
- }
- // S2B
- //
- // @Description: 在没有内存分配的情况下将字符串转换为字节片
- func S2B(s string) (b []byte) {
- bh := (*sliceHeader)(unsafe.Pointer(&b))
- sh := (*stringHeader)(unsafe.Pointer(&s))
- bh.data = sh.data
- bh.len = sh.len
- bh.cap = sh.len
- return
- return *(*[]byte)(unsafe.Pointer(&s))
- }
- // P2B
- //
- // @Description: 指针转[]byte
- // @param ptr 数据指针
- // @param size 数据尺寸
- // @return []byte 转换结果
- func P2B[T int | uintptr](ptr T, size T) []byte {
- j_bufs := make([]byte, size)
- copy(j_bufs, *(*[]byte)(unsafe.Pointer(&[3]uintptr{uintptr(ptr), uintptr(size), uintptr(size)})))
- return j_bufs
- }
- // P2S
- //
- // @Description: 指针转 string
- // @param ptr 数据指针
- // @param size 数据尺寸
- // @return []byte 转换结果
- func P2S[T int | uintptr](ptr T, size T) string {
- return string(P2B(ptr, size))
- }
|