Arrays golang:将uint32(或任何内置类型)转换为[]字节(写入文件)
我正在尝试使用不安全的库将uint32转换为Go中的字节数组(4字节):Arrays golang:将uint32(或任何内置类型)转换为[]字节(写入文件),arrays,go,byte,unsafe,Arrays,Go,Byte,Unsafe,我正在尝试使用不安全的库将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))) 前两行是正确的,但是我在copy调用中得到了一个运行时错误(意外的错误地址) 下一步是调用Write 将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)))
前两行是正确的,但是我在copy调用中得到了一个运行时错误(意外的错误地址)
下一步是调用Write
将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解释为。生成的切片无效,并且复制错误
不使用“不安全”的另一种方法是使用该软件包:
你需要使用不安全的软件包吗?不一定,但1)我已经花了几个小时处理这个问题,我想知道解决方案,2)我需要文件(使用十六进制编辑器分析)具有uint32而不需要额外加载,3)解决方案也应该与float32一起工作。我将编写写入文件的程序和读取文件的程序(相同的操作系统)。我知道,为了便于使用,我建议使用包中的write
和Read
方法。考虑到他们对接口的使用,他们可能会有一些开销。
[:]
h := (uint32)(((fh.year*100+fh.month)*100+fh.day)*100 + fh.h)
a := make([]byte, 4)
binary.LittleEndian.PutUint32(a, h)