Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays golang:将uint32(或任何内置类型)转换为[]字节(写入文件)_Arrays_Go_Byte_Unsafe - Fatal编程技术网

Arrays golang:将uint32(或任何内置类型)转换为[]字节(写入文件)

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个字节写入文件 我还发现了其他类似

我正在尝试使用不安全的库将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 := (*[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)