La Conversion de l'IPv6 à long et long terme pour IPv6

Comment dois-je effectuer la conversion depuis l'IPv6 à long et vice versa?

Pour l'instant j'ai:

    public static long IPToLong(String addr) {
            String[] addrArray = addr.split("\\.");
            long num = 0;
            for (int i = 0; i < addrArray.length; i++) {
                    int power = 3 - i;

                    num += ((Integer.parseInt(addrArray[i], 16) % 256 * Math.pow(256, power)));
            }
            return num;
    }

    public static String longToIP(long ip) {
            return ((ip >> 24) & 0xFF) + "."
                    + ((ip >> 16) & 0xFF) + "."
                    + ((ip >> 8) & 0xFF) + "."
                    + (ip & 0xFF);

    }

Est-ce la bonne solution ou j'ai raté quelque chose?

(Il serait parfait si la solution a fonctionné pour ipv4 et ipv6)

OriginalL'auteur Testeross | 2013-07-26