跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 问大家一下 CGO 里面的参数要怎么传?
未分類
29 10 月 2020

问大家一下 CGO 里面的参数要怎么传?

问大家一下 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)

  • 資深大佬 : MoYi123

    试了一下,
    data := [26]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}
    这样能返回 F9 56

  • 資深大佬 : imgk

    &data[0]

  • 資深大佬 : jworg

    偏一下题,有这个调试的时间还不如直接 go 实现了,或者关键词 golang ccitt 就有相应的代码实现。另外提醒一下,cgo 其实调用是比较慢的,如果调用频繁的话,非常影响性能。

  • 資深大佬 : rel

    地址不对
    crc := C.crc_ccitt((*C.uchar)(unsafe.Pointer(&data[0])), C.int(len(data)))

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具