Выкладываем структуру в байты - PullRequest
1 голос
/ 16 марта 2019

Я не могу найти способ компоновки структуры для программирования байтового массива с помощью GO.Я программирую расширение для сервиса GoBGP.Я хочу установить сообщество для маршрута через API GoBGP. Подробнее о BGP и сообществах .

Моя ситуация:

Я пытаюсь отправить 32-битное число.Во-первых, 16 бит интерпретируются как число AS, остальные 16-битные сообщества.API имеет интерфейс для uint32, чтобы установить все эти данные.Я хочу иметь простую структуру, такую ​​как:

type routeCommunity struct {
   AS        uint16
   Community uint16
}

Я пытаюсь передать данные этой структуры в переменную uint32.Я хотел бы разместить его в байтовом массиве, а затем я мог бы просто сделать из него uint32.

В C ++ у меня был бы указатель структуры, указывающий на массив символов, и я продолжал работать с этой структурой, и в конце я отправил бы массив символов.

Как это сделать вGolang ??

1 Ответ

2 голосов
/ 16 марта 2019

Вы можете передать свою структуру в переменную uint32, используя пакет «unsafe»:

func (rc *routeCommunity) bits() uint32 {
    return *(*uint32)(unsafe.Pointer(rc))
}

https://play.golang.org/p/AQeeoYUn7o0

UPD:

Имейте в виду, что положение битов зависит от порядка полей структуры.Два младших байта переменной содержат первое значение поля, а младшие два байта содержат второе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...