Кроссплатформенная версия ntohl ()?- C ++ - PullRequest
1 голос
/ 06 января 2012

Я пишу кроссплатформенный клиент и в архивах, извлеченных для использования, он использует контрольную сумму IEEE 802.3 Ethernet CRC-32 для каждого файла.Я запускаю эту проверку для всех файлов следующим образом:

if(s3d_meta_block.crc != 0x61580AC9)
{
    errorLog.writeError("File %i is not a valid file/ or is the directory", i);
}

В итоге происходит сбой на каждом из файлов, и я обнаружил, что он записан в другом месте в подобных клиентах с ntohl (0x61580AC9).

Я пишу это на 64-битной Windows, и в идеале хотелось бы, чтобы это работало на каждой платформе без необходимости включать «Winsock2.h» и другие библиотеки, участвующие в обращении порядка байтов.

Спасибо!

1 Ответ

1 голос
/ 06 января 2012

ntohl () включен на многих платформах и не будет / не будет менять местами биты, необходимые для выравнивания ваших процессоров.Единственное, что вам может понадобиться в вашем коде - это # ​​def для включения правильных заголовочных файлов для этой функции (я никогда не видел ОС без нее)

...