Почему здесь проблема с порядком байтов? - PullRequest
0 голосов
/ 03 сентября 2011

Я читал в этой теме о правилах наложения указателей, и один ответ дает следующий пример, в котором упоминается потенциальная проблема с порядком байтов, я хотел бы знать, может ли кто-нибудь дать мне что проблема порядка следования в следующем коде?

struct Msg
{
   unsigned int a;
   unsigned int b;
};

int main()
{
   // Pass data to something; if the implementer of this API were
   // strict-aliasing-aware, he would have taken a char*, not a unsigned int*
   Msg* msg = new Msg();
   msg->a = 1;
   msg->b = 2;

   // stupidBuffer is an alias for msg.
   // yes I know there are endianess problems here (WHY??), but my API is stupid and 
   // only works for one platform
   unsigned int* stupidBuffer = reinterpret_cast<unsigned int*>(msg);

   SendToStupidApi( stupidBuffer );   
}

Ответы [ 2 ]

10 голосов
/ 03 сентября 2011

Нет проблем с порядком байтов.До тех пор, пока StupidApi не предполагает отправку его по сети или сериализацию между платформами, проблема с порядком байтов вообще отсутствует.

0 голосов
/ 03 сентября 2011

Ваш API для обмена сообщениями должен позволять вам преобразовывать ваш локальный порядковый номер в сетевой (обычно большой порядковый) и обратно. Имея соглашение о сетевом бесконечности, любая машина может общаться с любой другой машиной в вашей сети, независимо от собственного порядка байтов.

Посмотрите в вашем API или примеры для этого. не зная, что вы используете, я боюсь, что мы не сможем вам помочь намного дальше, чем это.

...