1 Star 0 Fork 2

王布衣 / num

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
memory.go 1.42 KB
一键复制 编辑 原始数据 按行查看 历史
王布衣 提交于 2024-02-18 07:38 . 优化部分代码
package binary
import (
"fmt"
"reflect"
"strings"
"unsafe"
)
type SliceHeader = reflect.SliceHeader
type Memory struct {
addr *byte
data []byte
size int
}
func (m Memory) String() string {
sb := strings.Builder{}
bytes := m.data
for _, v := range bytes {
sb.WriteByte(' ')
sb.WriteString(fmt.Sprintf("%d", v))
}
text := sb.String()
return text[1:]
}
//func (m Memory) read() []byte {
// addr := uintptr(unsafe.Pointer(&m[0]))
// size := len([]byte(m))
// return *(*[]byte)(unsafe.Pointer(&SliceHeader{
// Data: addr,
// Len: size,
// Cap: size,
// }))
//}
//
//func (m Memory) v1read() []byte {
// addr := uintptr(unsafe.Pointer(&m[0]))
// size := len([]byte(m))
// return *(*[]byte)(unsafe.Pointer(&SliceHeader{
// Data: addr,
// Len: size,
// Cap: size,
// }))
//}
func Mem2(data []byte) Memory {
m := Memory{
addr: &data[0],
data: data,
size: len(data),
}
return m
}
func MemData[E any](x E) Memory {
addr := &x
rawPtr := unsafe.Pointer(addr)
size := int(unsafe.Sizeof(x))
b0 := (*[1]byte)(rawPtr)[:]
b1 := unsafe.Slice(&(b0[0]), size)
m := Memory{
addr: &b0[0],
data: b1,
size: size,
}
return m
}
func (m Memory) address() *byte {
return m.addr
}
func (m Memory) Bytes() []byte {
return m.data
}
func (m Memory) Float64() float64 {
addr := m.address()
return *(*float64)(unsafe.Pointer(addr))
}
func (m Memory) Inf64() int64 {
addr := m.address()
return *(*int64)(unsafe.Pointer(addr))
}
Go
1
https://gitee.com/quant1x/num.git
git@gitee.com:quant1x/num.git
quant1x
num
num
v0.3.1

搜索帮助