当前位置: 首页 > news >正文

go 内存二进制数据操作

go 内存二进制数据操作

go 内存二进制数据直接操作

以数字类型为例

int(linux/macos 为int32,windows 为int64). 如果不清楚可以使用unsafe.Sizeof函数来查看(函数出来的值*8就是int位数)

若不使用内存二进制数据操作,你需要在每次获取数字内容时调用binary.BigEndian/LittleEndian的方法来计算出数字大小。而具体是大端还是小端计算由系统决定.(win 小端,linux/macos 大端)

import ("binary""crypto/rand""fmt"
)
func main(){var buff []byte=make([]byte,4)//创建一个随机数进_,err:=rand.Reader.Read(buff)if err!=nil{panic("random number failed "+err.Error())}//获取这个随机数的值fmt.Println(binary.BigEndian.Uint32(buff))
}

直接操纵内存获取

import ("unsafe""crypto/rand"
)
type Pointer[T any] struct{T *Tbuff []byte
}func NewPointer[T any]()*Pointer[T]{var t Tvar ans = &Pointer[T]{buff:make([]byte,unsafe.Sizeof(t))}//获取类型占用内存字节数ans.T=(*T)(unsafe.Pointer(&ans.buff[0]))//将指针关联过去return ans
}
func (s *Pointer[T])Bytes()[]byte{return s.buff
}
func main(){ptr:=NewPointer[int]()_,err:=rand.Reader.Read(ptr.Bytes())if err!=nil{panic("random number failed "+err.Error())}fmt.Println(*ptr.T)//就像读取正常指针一样读取
}

多种类型复用同一块内存

//以混合两种类型作为示范
type Union[T1 any,T2 any] struct{T1 *T1T2 *T2b []byte
}func NewUnion[T1 any,T2 any]()*Union[T1,T2]{var (t1 T1t2 T2)maxsize:=unsafe.Sizeof(t1)t2size:=unsafe.Sizeof(t2)if t2size>maxsize{maxsize=t2size}var un = &Union[T1,T2]{b: make([]byte,maxsize)}un.T1=(*T1)(unsafe.Pointer(&un.b[0]))un.T2=(*T2)(unsafe.Pointer(&un.b[0]))return un
}
func (s *Union[T1,T2])Bytes()[]byte{return s.b
}
func main(){un:=NewUnion[int,float64]()*un.T1 = 23//存储23 int值*un.T2 = 178.5//需要作为float类型是设置为float类型
}
http://www.lryc.cn/news/295101.html

相关文章:

  • Antd+React+react-resizable实现表格拖拽功能
  • StringBuilder类常用方法(Java)
  • Iceberg从入门到精通系列之二十一:Spark集成Iceberg
  • Linux的进程信号
  • svn常用命令及过滤文件 global ignore pattern
  • 【QT+QGIS跨平台编译】之二十九:【HDF5+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • React 中实现拖拽功能-插件 react-beautiful-dnd
  • golang 引入swagger(iris、gin)
  • Java开发IntelliJ IDEA2023
  • LeetCode LCP 30.魔塔游戏:贪心(优先队列)
  • Oracle的权限
  • 20240206三次握手四次挥手
  • Navicat的使用教程,操作详解
  • Git―基本操作
  • 【PostgreSQL内核学习(二十六) —— (共享数据缓冲区)】
  • word调整论文格式的记录
  • android.MediaMuxer时间裁剪
  • 【蓝桥杯选拔赛真题91】Scratch筛选数据 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • 英语学习——16组英语常用短语
  • unity 增加系统时间显示、FPS帧率、ms延迟
  • 【Python基础】文件详解(文件基础、csv文件、时间处理、目录处理、excel文件、jsonpicke、ini配置文件)
  • [UI5 常用控件] 05.FlexBox, VBox,HBox,HorizontalLayout,VerticalLayout
  • Unity类银河恶魔城学习记录1-14 AttackDirection源代码 P41
  • DataX详解和架构介绍
  • 02.05
  • 【C语言】贪吃蛇 详解
  • Mysql MGR搭建
  • 新火种AI|寒武纪跌落神坛!七年连亏50亿,AI芯片第一股不行了吗?
  • three.js CSS3DObject、CSS2DObject、CSS3DSprite、Sprite的作为标签的区别
  • 第7节、双电机直线运动【51单片机+L298N步进电机系列教程】