У меня есть встроенное устройство, которое посылает мне дату UTC в этом формате (дата 4 байта):Кодирование декодирование байта
buffer.push_back((BYTE)(time_utc & 0x000000FF));
buffer.push_back((BYTE)((time_utc & 0x0000FF00) >> 8));
buffer.push_back((BYTE)((time_utc & 0x00FF0000) >> 16));
buffer.push_back((BYTE)((time_utc & 0xFF000000) >> 24));
На сервере я получаю байт и хранить их в socket_buf
, начиная с индекса 0-3 и его расшифровка с помощью следующей логики
mypkt.dateTime = ((socket_buf[0] << 24) +
(socket_buf[1 ] << 16) + socket_buf[2] << 8) +
(socket_buf[3] << 0));
Но я не уверен, если я правильно его расшифровки, поскольку даты я не правильно. Может ли кто-нибудь предложить мне правильный способ его декодирования? Я декодирование даты с помощью команды Linux (16711840 этого число я получаю путем декодирования):
#date -d @16711840
обе машины являются конечными? –
Я думаю, что это связано с порядком байтов в сетях. Сетевой порядок байтов является большим, и большинство процессоров Intel мало endian => это может быть ошибка. Вы посмотрели на функции C 'htons()' и 'ntohs()'? – jcxz
Но я также отправляю другие данные, которые я собираюсь извлечь правильно, я больше согласен с моей логикой относительно того, что я правильно декодирую его из socket_buf. Я не уверен, что мне нужно делать это так же, как на устройстве. – Rohit