Отказ от ответственности: я новичок в Go / CGo.
Я работаю с этой структурой C на 64-битной платформе, пытаюсь получить доступ к члену uint32 объединения
typedef enum {
n = 0,
ix = 1,
iy = 3
} enum_x;
struct smallStruct_s {
union {
uint32 a[4];
uint32 b[8];
uint32 c[16];
} u;
} smallStruct_t;
struct bigStruct_s {
enum_x fa;
union {
uint32 member_to_access; <<<<<< This is member that needs to be accessed
smallStruct_t an;
} un_t;
} bigStruct_t;
Я сталкиваюсь с трудностями при доступе / мутации member_to_access
в Go, если у меня есть доступ к bigStruct_t
, к которому можно получить доступ с помощью C.bigStruct_t
.
Как я могу передать адрес member_to_access с помощью unsafe.Pointer
вфункция, которая принимает void * в C без нарушения каких-либо ограничений памяти.
Машина с прямым порядком байтов
Я пытался использовать буферы byteArray и C, как упомянуто в Golang CGo: преобразование поля объединения вВведите , но не можете понять, почему функция принимает в качестве параметра массив размером 8 байт.