首页 > 解决方案 > Golang如何将sizeof结构提取为int

问题描述

我开始学习 golang,但遇到了我希望是一个简单的问题。

我有一个用 C 语言写入的文件,里面有几个结构。即 myStruct's 现在我想从这个文件中读取一个数据结构。

在 CI 中简单地打开一个文件并移动 fileptr 结构数 * sizeofStruct。像这样

int sizeofStruct = sizeof(myStruct)
seek(filehandle, searchNo*sizeofStruct)
read(filehandle, &data, sizeofStruct)

这在 Golang 中似乎不像“sizeof”那么简单……而是以 uintptr 结尾的多次转换……或者 reflect.int32()

var spect Spectrum // struct Spectrum
const SizeOfSpectrum = unsafe.Sizeof(spect)

sizeof(spect)我希望 SizeOfSpectrum在 C 中包含等于

你们能帮我在 int 变量中获取结构的大小吗?

标签: gointsizeof

解决方案


我有一个用 C 语言写入的文件,里面有几个结构。即 myStruct's 现在我想从这个文件中读取一个数据结构。在 C 中,我简单地打开一个文件并移动 fileptr 结构数 * sizeofStruct。

我还没有找到一种方法来获取数值并与另一个相乘,比如 int16 值。目的是在文件中寻找一个位置。


你在 Go 中做同样的事情,使用显式转换。

例如,

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    type S struct{ F int32 }
    i16 := int16(42)
    // The Go Programming Language Specification
    // https://golang.org/ref/spec
    // Numeric types
    // Explicit conversions are required when different
    // numeric types are mixed in an expression or assignment.
    // func (f *File) Seek(offset int64, whence int) (ret int64, err error)
    offset := int64(i16) * int64(unsafe.Sizeof(S{}))
    fmt.Println(offset)
}

游乐场: https: //play.golang.org/p/YFyU11Lf2qc

输出:

168

推荐阅读