diff --git a/src/Nazara/Network/Posix/IpAddressImpl.cpp b/src/Nazara/Network/Posix/IpAddressImpl.cpp index 3cd50535d..d00d58068 100644 --- a/src/Nazara/Network/Posix/IpAddressImpl.cpp +++ b/src/Nazara/Network/Posix/IpAddressImpl.cpp @@ -59,24 +59,13 @@ namespace Nz IpAddress::IPv6 convertSockaddr6ToIPv6(const in6_addr& addr) { - union byteToInt - { - UInt8 b[sizeof(uint32_t)]; - uint32_t i; - }; + auto& rawIpV6 = addr.s6_addr; - IpAddress::IPv6 ipv6Addr; + IpAddress::IPv6 ipv6; + for (unsigned int i = 0; i < 8; ++i) + ipv6[i] = rawIpV6[i * 2] << 8 | rawIpV6[i * 2 + 1]; - for (auto i = 0; i < 4; ++i) - { - byteToInt hostOrder; - hostOrder.i = 0; - std::copy(addr.s6_addr + 4 * i, addr.s6_addr + 4 * (i + 1), hostOrder.b); - ipv6Addr[2 * i] = (hostOrder.b[3] << 8) + hostOrder.b[2]; - ipv6Addr[2 * i + 1] = (hostOrder.b[1] << 8) + hostOrder.b[0]; - } - - return ipv6Addr; + return ipv6; } }