Преобразование байтов 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)

2

Решение

Я думаю, вы можете использовать союзы для этого

union Int32And4Bytes {
int32_t IntegerValue;
unsigned char ByteArray[4];
};

Это должно быть правильно выровнено, IIRC.

0

Другие решения


По вопросам рекламы [email protected]