go - 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 变量中获取结构的大小吗?
解决方案
我有一个用 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
推荐阅读
- python - 如何为python中的某些列添加前缀
- javascript - 无法在 puppeteer 中使用 xpath 提取下一页链接
- c++ - 如何在图标上方的壁纸上绘画?progman 0x052C 的替代方案
- selenium - 使用 Selenium 关键字查找元素中是否有任何文本
- javascript - 运行表单验证时我的 javascript 代码出错
- cakephp - cakephp 2.10 获取没有模型类的数据
- bootstrap-datetimepicker - datetimepicker 如何在 0-23 小时内显示时间?
- java - 如何在不启动任何活动或片段的情况下做到这一点
- node.js - 在无状态(REST)API 中使用 Redis(存储用户相关数据)是否错误?
- c++ - CBT Hook dll,拦截窗口被调整大小