Okay I found a way, this seems to work: ca := (*[1000000]byte) (unsafe.Pointer(certctx.pbCertEncoded))[:certctx. cbCertEncoded]
or mm := make([]byte, certctx.cbCertEncoded) for i := uint32(0) ; i < certctx.cbCertEncoded; i++ { mm[i] = *((*byte)(unsafe.Pointer(certctx.pbCertEncoded + uintptr(i) * unsafe.Sizeof(new(byte))))) } Anyway, the vet tool is complaining: main.go:106: possible misuse of unsafe.Pointer main.go:109: possible misuse of unsafe.Pointer This is the code fragment: 104 certctx := new(CERT_CONTEXT) 105 106 certctx = (*CERT_CONTEXT) (unsafe.Pointer(pccert_context)) 107 108 109 ca := (*[1000000]byte) (unsafe.Pointer(certctx.pbCertEncoded))[: certctx.cbCertEncoded] Is there another way to use syscall return values uintptr without vet warnings? And which solution should I prefer? I think the later one should be more safe, isn't it? Cheers Am Donnerstag, 14. Dezember 2017 09:29:38 UTC+1 schrieb snmed: > > Hi Miki > > I'm using syscall package and no C import, but maybe it is possible to use > this function as well? > > Am Donnerstag, 14. Dezember 2017 09:18:26 UTC+1 schrieb Miki Tebeka: >> >> Do you mean >> >> func C.GoBytes(unsafe.Pointer, C.int) []byte >> >> ? >> >> On Thursday, December 14, 2017 at 9:05:32 AM UTC+2, snmed wrote: >>> >>> Hi all >>> >>> I'm trying to map a C structure to an equivalent go struct, but I bumped >>> into a problem with a pointer to byte that is actually an array of bytes. >>> >>> Here is the C struct: >>> >>> typedef struct _CERT_CONTEXT { >>> DWORD dwCertEncodingType; >>> BYTE *pbCertEncoded; >>> DWORD cbCertEncoded; >>> PCERT_INFO pCertInfo; >>> HCERTSTORE hCertStore; >>> } CERT_CONTEXT, *PCERT_CONTEXT; >>> >>> >>> and this is my go struct: >>> >>> type CERT_CONTEXT struct { >>> dwCertEncodingType uint32 >>> pbCertEncoded uintptr >>> cbCertEncoded uint32 >>> pCertInfo uintptr >>> hCertStore uintptr >>> } >>> >>> for my case I need only the first 3 fields and I do not have any problem >>> to get 1 and 3, but I can't remember how to translate the second field to a >>> slice of bytes. >>> This is how I map the struct from an uintptr and print it to the console: >>> >>> certctx = (*CERT_CONTEXT) (unsafe.Pointer(pccert_context)) >>> fmt.Printf("%v\n", certctx) >>> >>> >&{1 807520 674 833008 789360} >>> >>> Any advise is warmly welcome. >>> >>> Cheers, >>> Sandro >>> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.