代码拉取完成,页面将自动刷新
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))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。