/*
 * 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
/** * 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.
/** 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.
Params:
  • s – hexadecimal string
Returns:decoded array
/** * 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.
Params:
  • b – byte array
Returns:hexadecimal string
/** * 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); } }