doutian4046 2019-02-25 15:43
浏览 187

Golang如何将struct的sizeof提取为int

I'm starting to learn golang but come across what I hope is a simple problem.

I have a file written to in C with several structs. ie myStruct's Now I want to read one struct of data from this file.

In C I simple open a file and move the fileptr number of structs * sizeofStruct. Like this

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

This doesn't seem to be as simple in Golang as "sizeof"... rather multiple conversions ending up in uintptr... something, or reflect.int32()

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

I was hoping SizeOfSpectrum would contain equal to sizeof(spect) in C

Can you guys help me to get the size of a struct in an int variable?

  • 写回答

1条回答 默认 最新

  • doujian7132 2019-02-26 15:53
    关注

    I have a file written to in C with several structs. ie myStruct's Now I want to read one struct of data from this file. In C i simple open a file and move the fileptr number of structs * sizeofStruct.

    I haven't found a way to get the numeric value and multiply with another, say int16 value. Purpose is to seek a position within the file.


    You do the same thing in Go, using explicit conversions.

    For example,

    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)
    }
    

    Playground: https://play.golang.org/p/YFyU11Lf2qc

    Output:

    168
    
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧