我這樣做的方式是找到要讀取的字節數(guint32 * oid_len的大小),然後在字節數上做了binary.Read(),然後循環遍歷字節尺寸。容易回想起來;硬的部分就是類型轉換的工作作爲圍棋是比C
嚴格例如,以下是爲guint32 *轉換爲圍棋串(表示SNMP OID)的Go代碼:
func gIntArrayOidString(oid *_Ctype_guint32, oid_len _Ctype_gsize) (result string) {
size := int(unsafe.Sizeof(*oid))
length := int(oid_len)
gbytes := C.GoBytes(unsafe.Pointer(oid), (_Ctype_int)(size*length))
buf := bytes.NewBuffer(gbytes)
for i := 0; i < length; i++ {
var out uint32
if err := binary.Read(buf, binary.LittleEndian, &out); err == nil {
result += fmt.Sprintf(".%d", out)
} else {
return "<error converting oid>"
}
}
if len(result) > 1 {
return result[1:] // strip leading dot
}
return "<error converting oid>"
}
評論?
上下文:代碼是從gsnmpgo。
謝謝Axw,我會檢查出來。 – 2013-12-05 23:09:08