Hex.java
- /*
- * Copyright (C) 2020, Michael Dardis. and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.util;
- import java.text.MessageFormat;
- import org.eclipse.jgit.internal.JGitText;
- /**
- * Encodes and decodes to and from hexadecimal notation.
- *
- * @since 5.7
- */
- public final class Hex {
- private static final char[] HEX = "0123456789abcdef".toCharArray(); //$NON-NLS-1$
- /** Defeats instantiation. */
- private Hex() {
- // empty
- }
- /**
- * Decode a hexadecimal string to a byte array.
- *
- * Note this method validates that characters in the given string are valid
- * as digits in a hex string.
- *
- * @param s
- * hexadecimal string
- * @return decoded array
- */
- public static byte[] decode(String s) {
- int len = s.length();
- byte[] b = new byte[len / 2];
- for (int i = 0; i < len; i += 2) {
- int left = Character.digit(s.charAt(i), 16);
- int right = Character.digit(s.charAt(i + 1), 16);
- if (left == -1 || right == -1) {
- throw new IllegalArgumentException(MessageFormat.format(
- JGitText.get().invalidHexString,
- s));
- }
- b[i / 2] = (byte) (left << 4 | right);
- }
- return b;
- }
- /**
- * Encode a byte array to a hexadecimal string.
- *
- * @param b byte array
- * @return hexadecimal string
- */
- public static String toHexString(byte[] b) {
- char[] c = new char[b.length * 2];
- for (int i = 0; i < b.length; i++) {
- int v = b[i] & 0xFF;
- c[i * 2] = HEX[v >>> 4];
- c[i * 2 + 1] = HEX[v & 0x0F];
- }
- return new String(c);
- }
- }