golang调用c结构体时的字节对齐问题

huqing008 · · 1016 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

c结构体按1字节对齐时, 结构体Fc_tgs_struct与Fc_tgs_struct_2的大小不一致,谁能解答一下 --------------------------------struct.h-------------------------------- #ifndef HEAD_STRUCT_C #define HEAD_STRUCT_C #include <stdio.h> #define BYTE_PACK_ON #ifdef BYTE_PACK_ON #pragma pack(1) #endif struct Fc_tgs_struct { char cFlag; unsigned int uTime; char sName[32]; char sPwd[64]; long long llVal; }; struct Fc_tgs_struct_2 { unsigned int uTime; char sName[32]; char sPwd[64]; long long llVal; char cFlag; }; #ifdef BYTE_PACK_ON #pragma pack() #endif #endif /// HEAD_STRUCT_C --------------------------------cCallDemo.go-------------------------------- /** * Created by huQg on 2018/5/31,031. */ package cCallDemo /* #include "struct.h" */ import "C" import ( "fmt" "unsafe" ) func calccCallStruct() { ctg := C.struct_Fc_tgs_struct{} isz := unsafe.Sizeof(ctg) fmt.Printf("struct Fc_tgs_struct's size = %d\n", isz) ctg2 := C.struct_Fc_tgs_struct_2{} isz = unsafe.Sizeof(ctg2) fmt.Printf("struct Fc_tgs_struct_2's size = %d\n", isz) } --------------------------------cCallDemo_test.go-------------------------------- /* * Created by huQg on 2018/5/31,031. */ package cCallDemo import ( "testing" ) func TestXYZ(t *testing.T) { /// struct calccCallStruct() }

有疑问加站长微信联系(非本文作者)

第 1 条附言  · 
场景是golang调用c的结构体,两个结构体,字段一致,顺序不一样 按1字节对齐的时候,两结构体的size在用c直接调用时是一样的,但是用golang调用时,结果不一样

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1016 次点击  
加入收藏 微博
1 回复  |  直到 2018-05-31 19:16:40
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传