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 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发