Golang 对于 C 结构体中的一个问题

2018-03-21 15:54:29 +08:00
 eloah

有以下一个 C 的结构体

#pragma pack(1) //单字节对齐
typedef struct{
	unsigned char	a[2048];
	unsigned int	b;
}sampleStruct;
#pragma pack()

在 Golang 中给这个结构体赋值

var sampleStruct C.sampleStruct = C.sampleStruct{
	[2048]C.uchar{}
	C.uint(0)
}

理论上应该是成功的,但是编译器却提示我

cannot use _Ctype_uint(0) (type _Ctype_uint) as type [4]byte in field value

测试平台

有大佬知道为什么会这样吗

另外,定义如下函数

unsigned int add(unsigned int a, unsigned int b) {
    return a + b;
}

在 golang 中使用如下调用

C.add(C.uint(2), C.uint(1))

是成功的

1855 次点击
所在节点    Go 编程语言
2 条回复
eloah
2018-03-21 16:30:12 +08:00
额......我给的这个去除了业务逻辑的代码是可以运行的......除了小的语法错误......
我再看看......
eloah
2018-03-21 17:20:54 +08:00
因为 Golang 和 C 的对齐方式差异,可能出现这类问题
https://github.com/Shopify/sysv_mq/issues/10

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX