加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – golang:将uint32(或任何内置类型)转换为[] byte(写入文

发布时间:2020-12-16 19:23:42 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用不安全的库将uint32转换为Go中的字节数组(4个字节): h := (uint32)(((fh.year*100+fh.month)*100+fh.day)*100 + fh.h)a := make([]byte,unsafe.Sizeof(h))copy(a,*(*[]byte)(unsafe.Pointer(h))) 前两行是正确的,但后来我在复制调用时遇到运
我正在尝试使用不安全的库将uint32转换为Go中的字节数组(4个字节):
h := (uint32)(((fh.year*100+fh.month)*100+fh.day)*100 + fh.h)
a := make([]byte,unsafe.Sizeof(h))
copy(a,*(*[]byte)(unsafe.Pointer(&h)))

前两行是正确的,但后来我在复制调用时遇到运行时错误(意外故障地址).

下一步是调用Write

_,err = fi.Write(a)

将4个字节写入文件.

我发现了类似主题的其他问题,但没有一个有工作代码.
我也知道不安全是不安全的.

任何帮助将不胜感激.

这是一种方法:
h := (uint32)(((fh.year*100+fh.month)*100+fh.day)*100 + fh.h)
a := (*[4]byte)(unsafe.Pointer(&h))[:]

这是对正在发生的事情的细分.代码

(*[4]byte)(unsafe.Pointer(&h))

将uint32指针转换为[4]字节指针.该

[:]

最后在[4]字节上创建一个切片.

问题中的代码将uint32解释为slice header.结果切片无效并复制错误.

不使用不安全的替代方法是使用encoding/binary包:

h := (uint32)(((fh.year*100+fh.month)*100+fh.day)*100 + fh.h)
a := make([]byte,4)
binary.LittleEndian.PutUint32(a,h)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读