返回

Go 语言系列43:CGO 编程入门(四)

发布时间:2023-09-06 00:12:21 210

这一期我们讲一讲 CGO 中关于 C 数值类型的转换。


Go 语言系列43:CGO 编程入门(四)_调用方法

数值类型

Go 语言系列43:CGO 编程入门(四)_c语言_02


我们在前几期讲过,在 Go 语言中使用 C 语言是通过访问 C 伪包实现的。下面的表格展示了 Go 语言中数值类型和 C 语言数值类型之间的对应关系:

C语言类型

CGO类型(调用方法)

Go语言类型

char

C.char

byte

singed char

C.schar

int8

unsigned char

C.uchar

uint8

short

C.short

int16

unsigned short

C.ushort

uint16

int

C.int

int32

unsigned int

C.uint

uint32

long

C.long

int32

unsigned long

C.ulong

uint32

long long int

C.longlong

int64

unsigned long long int

C.ulonglong

uint64

float

C.float

float32

double

C.double

float64

size_t

C.size_t

uint

这里需要注意数值类型所对应分配的内存大小,例如,在 CGO 中 C 语言的 ​​int​​​ 类型是固定为 ​​4​​​ 字节大小的,而在 Go 语言中 ​​int​​​ 类型分配的内存大小是要看系统的,在 32 位系统下分配的是 ​​4​​​ 个字节,而在 64 位系统下分配的是 ​​8​​ 个字节。

当然,你也可以在 C 语言中使用 Go 语言的类型,例如在 C 语言中访问 Go 语言的 ​​int​​ 类型,这里推荐使用 头文件,该文件更加明确了每个数值类型所对应的内存大小,其对应关系如下表:

C语言类型

CGO类型(调用方法)

Go语言类型

int8_t

C.int8_t

int8

uint8_t

C.uint8_t

uint8

int16_t

C.int16_t

int16

uint16_t

C.uint16_t

uint16

int32_t

C.int32_t

int32

uint32_t

C.uint32_t

uint32

int64_t

C.int64_t

int64

uint64_t

C.uint64_t

uint64

当然,这里使用 C 语言类型与 Go 语言类型之间的转换要考虑安全问题,确实坑很多x

参考文献:

[1] 柴树杉;曹春晖, Go 语言高级编程, 北京: 人民邮电出版社, 2019.




特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线