All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.develop.mnemonic.utils.Numeric Maven / Gradle / Ivy

package com.develop.mnemonic.utils;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;

public class Numeric {
  private static final String HEX_PREFIX = "0x";
  
  private static boolean isValidHexQuantity(String value) {
    if (value == null)
      return false; 
    if (value.length() < 3)
      return false; 
    if (!value.startsWith("0x"))
      return false; 
    return true;
  }
  
  public static String cleanHexPrefix(String input) {
    if (containsHexPrefix(input))
      return input.substring(2); 
    return input;
  }
  
  public static String prependHexPrefix(String input) {
    if (!containsHexPrefix(input))
      return "0x" + input; 
    return input;
  }
  
  public static boolean containsHexPrefix(String input) {
    return (input.length() > 1 && input.charAt(0) == '0' && input.charAt(1) == 'x');
  }
  
  public static BigInteger toBigInt(byte[] value, int offset, int length) {
    return toBigInt(Arrays.copyOfRange(value, offset, offset + length));
  }
  
  public static BigInteger toBigInt(byte[] value) {
    return new BigInteger(1, value);
  }
  
  public static BigInteger toBigInt(String hexValue) {
    String cleanValue = cleanHexPrefix(hexValue);
    return toBigIntNoPrefix(cleanValue);
  }
  
  public static BigInteger toBigIntNoPrefix(String hexValue) {
    return new BigInteger(hexValue, 16);
  }
  
  public static String toHexStringWithPrefix(BigInteger value) {
    return "0x" + value.toString(16);
  }
  
  public static String toHexStringNoPrefix(BigInteger value) {
    return value.toString(16);
  }
  
  public static String toHexStringNoPrefix(byte[] input) {
    return toHexString(input, 0, input.length, false);
  }
  
  public static String toHexStringWithPrefixZeroPadded(BigInteger value, int size) {
    return toHexStringZeroPadded(value, size, true);
  }
  
  public static String toHexStringWithPrefixSafe(BigInteger value) {
    String result = toHexStringNoPrefix(value);
    if (result.length() < 2)
      result = Strings.zeros(1) + result; 
    return "0x" + result;
  }
  
  public static String toHexStringNoPrefixZeroPadded(BigInteger value, int size) {
    return toHexStringZeroPadded(value, size, false);
  }
  
  private static String toHexStringZeroPadded(BigInteger value, int size, boolean withPrefix) {
    String result = toHexStringNoPrefix(value);
    int length = result.length();
    if (length > size)
      throw new UnsupportedOperationException("Value " + result + "is larger then length " + size); 
    if (value.signum() < 0)
      throw new UnsupportedOperationException("Value cannot be negative"); 
    if (length < size)
      result = Strings.zeros(size - length) + result; 
    if (withPrefix)
      return "0x" + result; 
    return result;
  }
  
  public static byte[] toBytesPadded(BigInteger value, int length) {
    int bytesLength, srcOffset;
    byte[] result = new byte[length];
    byte[] bytes = value.toByteArray();
    if (bytes[0] == 0) {
      bytesLength = bytes.length - 1;
      srcOffset = 1;
    } else {
      bytesLength = bytes.length;
      srcOffset = 0;
    } 
    if (bytesLength > length)
      throw new RuntimeException("Input is too large to put in byte array of size " + length); 
    int destOffset = length - bytesLength;
    System.arraycopy(bytes, srcOffset, result, destOffset, bytesLength);
    return result;
  }
  
  public static byte[] hexStringToByteArray(String input) {
    byte[] data;
    int startIdx;
    String cleanInput = cleanHexPrefix(input);
    int len = cleanInput.length();
    if (len == 0)
      return new byte[0]; 
    if (len % 2 != 0) {
      data = new byte[len / 2 + 1];
      data[0] = (byte)Character.digit(cleanInput.charAt(0), 16);
      startIdx = 1;
    } else {
      data = new byte[len / 2];
      startIdx = 0;
    } 
    for (int i = startIdx; i < len; i += 2)
      data[(i + 1) / 2] = 
        (byte)((Character.digit(cleanInput.charAt(i), 16) << 4) + Character.digit(cleanInput.charAt(i + 1), 16)); 
    return data;
  }
  
  public static String toHexString(byte[] input, int offset, int length, boolean withPrefix) {
    StringBuilder stringBuilder = new StringBuilder();
    if (withPrefix)
      stringBuilder.append("0x"); 
    for (int i = offset; i < offset + length; i++) {
      stringBuilder.append(String.format("%02x", new Object[] { Integer.valueOf(input[i] & 0xFF) }));
    } 
    return stringBuilder.toString();
  }
  
  public static String toHexString(byte[] input) {
    return toHexString(input, 0, input.length, true);
  }
  
  public static byte asByte(int m, int n) {
    return (byte)(m << 4 | n);
  }
  
  public static boolean isIntegerValue(BigDecimal value) {
    return (value.signum() == 0 || value
      .scale() <= 0 || value
      .stripTrailingZeros().scale() <= 0);
  }
}


/* Location:              C:\Users\Administrator\Desktop\mnemonic-sdk-1.0.0.jar!\com\develop\mnemoni\\utils\Numeric.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       1.1.3
 */




© 2015 - 2025 Weber Informatics LLC | Privacy Policy