问大家一下 CGO 里面的参数要怎么传?
資深大佬 : nash 1
package main /* #include <stdio.h> unsigned short crc_ccitt(unsigned char *q, int len) { int i, j; int c, crc = 0xffff; for(i=0; i<len; i++) { c = q[i] & 0x00ff; crc ^= c; for(j=0; j<8; j++) { if((crc&0x0001) != 0) { crc >>= 1; crc ^= 0xA001; } else { crc >>= 1; } } } return (unsigned short)crc; } */ import "C" import ( "fmt" "unsafe" ) func Crc() { data := []byte{0x99, 0x88, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0e, 0x0c, 0x32, 0x31, 0x30, 0x31, 0x31, 0x38, 0x30, 0x37, 0x30, 0x30, 0x31, 0x30, 0x18} crc := C.crc_ccitt((*C.uchar)(unsafe.Pointer(&data)), C.int(len(data))) // 期望结果 56 f9 fmt.Printf("%X", crc) } func main() { Crc() }
有个 CRC 校验的东西是 C 写的,我就想着难得去用 go 实现直接 CGO 调用,发现这个参数怎么传都不对,请教下各位大神,谢谢
大佬有話說 (4)