Например:
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)
Я думаю, вы можете использовать союзы для этого
union Int32And4Bytes {
int32_t IntegerValue;
unsigned char ByteArray[4];
};
Это должно быть правильно выровнено, IIRC.