Golang Как извлечь размер структуры в int - PullRequest
0 голосов
/ 25 февраля 2019

Я начинаю изучать golang, но натолкнулся на то, что, как я надеюсь, является простой проблемой.

У меня есть файл, записанный в C с несколькими структурами.т.е. myStruct's Теперь я хочу прочитать одну структуру данных из этого файла.

В CI просто откройте файл и переместите fileptr на число структур * sizeofStruct.Вот так

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

В Голанге это не так просто, как в "sizeof" ... скорее несколько преобразований, заканчивающихся в uintptr ... что-то, или отражать .int32 ()

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

Я надеялся, что SizeOfSpectrum будет содержать равный sizeof(spect) в C

Можете ли вы, ребята, помочь мне получить размер структуры в переменной int?

1 Ответ

0 голосов
/ 26 февраля 2019

У меня есть файл, написанный на C с несколькими структурами.т.е. myStruct's Теперь я хочу прочитать одну структуру данных из этого файла.В C i просто откройте файл и переместите 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
...