2012-04-19 2 views
4

asio::ip::address_v6 принимает значение bytes_type для параметра, который в основном является boost::array в сетевом порядке.Самый быстрый способ инициализации asio :: ip :: address_v6()?

У меня есть адрес RAW IPv6 в переменной void *. Какой самый быстрый способ превратить void * в asio::ip::address_v6? Предпочтительно использовать конструктор.

ответ

4

Вы не можете сделать лучше, чем инициализация asio::ip::address_v6::bytes_type, которая может быть на самом деле std::array или boost::array:

// We need an unsigned char* pointer to the IP address 
unsigned char *youraddr = reinterpret_cast<unsigned char*>(your_void_ptr); 
asio::ip::address_v6::bytes_type myaddr; 
// Copy the address into our array 
std::copy(youraddr, youraddr + myaddr.size(), myaddr.data()); 
// Finally, initialize. 
asio::ip::address_v6 ipv6(myaddr); 

Обратите внимание, что было бы лучше, чтобы непосредственно хранить bytes_type вместо этого void*, если вы могут модифицировать эту структуру, очевидно.

Смежные вопросы