001package co.codewizards.cloudstore.core.util;
002
003import static java.util.Objects.*;
004
005public final class LongUtil {
006
007        private LongUtil() {
008        }
009
010        public static final byte[] toBytes(final long value) {
011                final byte[] bytes = new byte[8];
012
013                int idx = -1;
014                for (int i = 7; i >= 0; --i)
015                        bytes[++idx] = (byte) (value >> (8 * i));
016
017                return bytes;
018        }
019
020        public static final long fromBytes(final byte[] bytes) {
021                requireNonNull(bytes, "bytes");
022                long value = 0;
023
024                final int imax = Math.min(8, bytes.length);
025                for (int i = 0; i < imax; ++i)
026                        value = (value << 8) | (bytes[i] & 0xff);
027
028                return value;
029        }
030
031        public static final String[] toBytesHex(final long value, final boolean withZeroPadding) {
032                final byte[] bytes = toBytes(value);
033                String[] result = new String[bytes.length];
034                for (int i = 0; i < bytes.length; i++) {
035                        result[i] = Integer.toHexString(bytes[i] & 0xff);
036
037                        if (withZeroPadding && result[i].length() == 1)
038                                result[i] = '0' + result[i];
039                }
040                return result;
041        }
042
043        public static final long fromBytesHex(final String[] bytesHex) {
044                requireNonNull(bytesHex, "bytesHex");
045                final byte[] bytes = new byte[bytesHex.length];
046                for (int i = 0; i < bytesHex.length; i++)
047                        bytes[i] = (byte) Integer.parseInt(bytesHex[i], 16);
048
049                return fromBytes(bytes);
050        }
051}