У меня есть структура со следующими элементами. Кроме того, конструкция полностью заполнена.
typedef struct {
uint16_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint8_t e[6];
} ad;
Эта структура имеет порядок следования байтов. Я имею в виду, что когда я печатаю эту структуру на своей машине с прямым порядком байтов, я получаю следующее
если c=1 , d=2, e[0] =3, e[1]=4. я получил
c=4, d=3, e[0] = 2 и e[1]=1.
а и б меняются местами. далее e[1] заменяется на c, а e[0] заменяется на d.
Я использую функцию htonl, как показано ниже. но это не работает, может ли кто-нибудь предложить мне хороший ответ.
structразмещаются в памяти, предписан стандартом, не ожидайте, что какой-либо компилятор нарушит его только из-за порядка следования байтов. - person Daniel Fischer   schedule 30.11.2012uint16_tна машине LE со значением1становится256(или 0x0100, если хотите) на машине BE. То, что вы видите, это данные, которые не совпадают с тем, что вы отправили. Разница в порядке байтов не меняет местами элементы структуры (если вы не делаете что-то глупое, например, вызываете*((uint32_t*)&s) = htonl(*(uint32_t*)&s), гдеs— это структура, как у вас выше. Тогда все ставки отключены). - person WhozCraig   schedule 30.11.2012