У меня есть массив беззнаковых символов, представляющих 128-битное число в порядке сетевых байтов.Как мне эффективно преобразовать это в порядок байтов хоста (в данном случае x86_64)?
Кажется, что в endian.h нет макросов, и моя попытка преобразовать старшие 64 бита и младшие64 бита независимо не работали.Единственный найденный мной метод, который определенно работает, - это цикл вроде:
unsigned __int128 num = 0;
for (int i = 0; i < 16; i++) {
num = (num << 8) | byte[i];
}
В итоге я сделал следующее:
union {
unsigned char b[MD5_DIGEST_LENGTH];
uint64_t d[2];
unsigned __int128 q;
} digest;
MD5((const unsigned char *)str, length, digest.b);
uint64_t tmp = digest.d[0];
digest.d[0] = be64toh(digest.d[1]);
digest.d[1] = be64toh(tmp);
/* digest.q is now in native byte order */