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.mzph.cn/news/671246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五、机器学习模型及其实现1

1_机器学习 1)基础要求:所有的数据全部变为了特征,而不是eeg信号了 python基础已经实现了特征提取、特征选择(可选)进行了数据预处理.预处理指对数据进行清洗、转换等处理,使数据更适合机器学习的工具。S…

完全背包总结二

1.完全背包和0/1背包的区别? 完全背包的物体有无限个,可以多次放入 0/1背包的物体只有一个,只能放入一次 2.关于物品遍历顺序 在0/1背包中为了防止物品被重复放入,所以选择倒序遍历背包 而完全背包中,可以重复放入…

Datax3.0+DataX-Web部署分布式可视化ETL系统

一、DataX 简介 DataX 是阿里云 DataWorks 数据集成的开源版本,主要就是用于实现数据间的离线同步。DataX 致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源(即不同的数据库&#x…

找单身狗(C语言)

题目叙述: 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。 例如: 数组的元素是:1,2,3,4,5,1,…

从零开始手写mmo游戏从框架到爆炸(八)— byte数组传输

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 Netty帧解码器 Netty中,提供了几个重要的可以直接使用的帧解码器。 LineBasedFrameDecoder 行分割帧解码器。适用场景:每个上层数据包,使…

Rust 初体验

Rust 初体验 安装 打开官网,下载 rustup-init.exe, 选择缺省模式(1)安装。 国内源设置 在 .Cargo 目录下新建 config 文件,添加如下内容: [source.crates-io] registry "https://github.com/rus…

spring-security SecurityContextHolder

翻译版本【spring-security 6.2.1】SecurityContextHolder SecurityContextHolder Spring Security身份验证模型的核心是SecurityContextHolder。它包含SecurityContext。 SecurityContextHolder是Spring Security存储身份验证详细信息的地方。Spring Security并不关心Secur…

【C语言】深入理解函数指针

函数指针是 C 语言中一个非常有用且强大的概念,它允许我们将函数作为参数传递给其他函数、在运行时动态选择要调用的函数以及实现回调函数等功能。在本篇博客中,我们将深入探讨函数指针的概念、用法以及其在实际编程中的应用。 目录 前言 什么是函数指…

C++ 动态规划 状态压缩DP 蒙德里安的梦想

求把 NM 的棋盘分割成若干个 12 的长方形,有多少种方案。 例如当 N2,M4 时,共有 5 种方案。当 N2,M3 时,共有 3 种方案。 如下图所示: 2411_1.jpg 输入格式 输入包含多组测试用例。 每组测试用例占一行…

OCR文本纠错思路

文字错误类别:多字 少字 形近字 当前方案 文本纠错思路 简单: 一、构建自定义词典,提高分词正确率。不在词典中,也不是停用词,分成单字的数据极有可能是错字(少部分可能是新词)。错字与前后的…

webapi-元素的属性设置-图片切换的案例

元素的属性设置 1.目标 ​ 掌握图片的src属性的设置 在页面使用img标签显示一张图片, 点击这个图片更换一张新的图片 2.实现思路 使用img 指定src “路径” 指定id“one”获取img标签, 添加onclick 点击事件在事件处理程序函数体中修改图片的src的值 3.代码实…

uniapp设置不显示顶部返回按钮

一、pages文件中,在相应的页面中设置 "titleNView": {"autoBackButton": false} 二、对应的页面文件设置隐藏元素 document.querySelector(.uni-page-head-hd).style.display none

【Git】三棵“树”介绍

Git是一种分布式版本控制系统,它使用了三树原理来管理代码的变化和版本。 三树原理包括工作区树(Working Tree)、暂存区树(Staging Area/Index)和版本库树(Commit/HEAD)。 工作区树&#xff08…

计算机网络实验四

实验四 VLAN划分与配置 1、实验目的 • 理解并掌握Port Vlan的配置方法 • 理解并掌握掌握跨交换机实现VLAN的配置方法 2、实验设备 (1)实验内容1:交换机端口隔离—Port Vlan的配置 以太网交换机一台笔记本电脑一台PC机两台配置电缆、网…

二重指数和估计难多了

单变量指数和估计有指数对方法(1933年英国人E.Phillips创造),印度人B.R.Srinivasan在1960年代搞出的二重指数对理论(发表在 Math.Ann.),由于没用二变量同步的Weyl不等式,是很肤浅的,而且1988年德…

收藏:相当大赞的来自 Agilean产品团队的2篇关于重塑敏捷组织的绩效管理的文章

Agilean产品团队,是吴穹博士领导下最近在国内敏捷界很厉害的产品,今天看到两篇相当不错的说敏捷组织的上下篇文章,分享下,地址是:6个原则15项举措,重塑敏捷组织的绩效管理(上) 6个原…

星宸科技SSC8826Q 驾驶辅助(ADAS)行车记录仪方案

星宸科技SSC8826Q 驾驶辅助(ADAS)行车记录仪方案 一、方案描述 SSC8826Q是高度集成的行车记录仪、流媒体后视镜解决方案,主芯片为ARM Cortex A53,dual core,主频高达1.2GHz,集成了64-bit dual-core RISC 处…

Windows 版Oracle 数据库(安装)详细过程

首先到官网上去下载oracle64位的安装程序 第一步:将两个datebase文件夹解压到同一目录中。 当下载完成后,它里面是两个文件夹 win64_11gR2_database_1of2, win64_11gR2_database_2of2,我们需要把其中的一个database文件夹整合在一起(复制一个database文件夹到另一…

如何有效的向 AI 提问 ?

目录 〇、导言 一、Base LLM 与 Instruction Tuned LLM 二、如何提出有效的问题 ? 1. 明确问题: 2. 简明扼要: 3. 避免二义性: 4. 避免绝对化的问题: 5. 利用引导词: 6. 检查语法和拼写&#xff1…

哈希加密Python实现

一、代码 from cryptography.fernet import Fernet import os import bcrypt# 密钥管理和对称加密相关 def save_key_to_file(key: bytes, key_path: str):with open(key_path, wb) as file:file.write(key)def load_key_from_file(key_path: str) -> bytes:if not os.path…