Преобразование байтов IP-адреса в целое число
Например:
1. Чтобы преобразовать 32-битный IP-адрес (IPv4):
unsigned char ByteAddress[4]; unsigned int* IntegerAddress; IntegerAddress = reinterpret_cast<unsigned int*> &ByteAddress ;
Затем я могу использовать IntegerAddress для сравнения IP-адресов.
2. Чтобы преобразовать 128-битный IP-адрес (IPv6):
unsigned char ByteAddress[16]; uint64_t* LongAddress; LongAddress = reinterpret_cast<uint64_t*> &ByteAddress
Затем я могу использовать LongAddress [0] и LongAddress[1] для сравнения IP-адресов.
Является ли это предпочтительным по сравнению с использованием операторов сдвига битов (как это быстрее)? Это хорошая практика программирования? Будет ли это работать для всех платформ (особенно Unix и Windows 64) и компиляторов (C++, VS2010)
1 ответ
Я думаю, вы можете использовать союзы для этого
union Int32And4Bytes {
int32_t IntegerValue;
unsigned char ByteArray[4];
};
Это должно быть правильно выровнено, IIRC.