Страницы руководства для htonl()
, похоже, предполагают, что вы можете использовать его только для 32-битных значений. (На самом деле, ntohl()
определяется для unsigned long, который на моей платформе 32 бита. Предполагаю, что если unsigned long был 8 байтов, он работал бы на 64-битных ints).
Моя проблема в том, что мне нужно преобразовать 64-битные целые числа (в моем случае это длинный длинный знак без знака) от большого endian до little endian. Прямо сейчас, мне нужно сделать это конкретное преобразование. Но было бы еще лучше, если бы функция (например, ntohl()
) НЕ конвертировала бы мое 64-битное значение, если целевая платформа WAS была большой endian. (Я бы предпочел не добавлять к нему собственную магию препроцессора).
Что я могу использовать? Я бы хотел что-то стандартное, если оно существует, но я открыт для предложений по внедрению. Я видел этот тип преобразования, сделанный в прошлом с помощью профсоюзов. Я полагаю, что я мог бы иметь соединение с unsigned long long и char [8]. Затем поменяйте байты соответственно. (Очевидно, будет разбит на платформах, которые были большими endian).