Package ghidra.util

Class NumericUtilities


  • public final class NumericUtilities
    extends java.lang.Object
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static long bigIntegerToUnsignedLong​(java.math.BigInteger value)  
      static java.lang.String convertBytesToString​(byte[] bytes)
      Convert a byte array into a hexadecimal string.
      static java.lang.String convertBytesToString​(byte[] bytes, int start, int len, java.lang.String delimeter)
      Convert a byte array into a hexadecimal string.
      static java.lang.String convertBytesToString​(byte[] bytes, java.lang.String delimeter)
      Convert a byte array into a hexadecimal string.
      static java.lang.String convertBytesToString​(java.lang.Iterable<java.lang.Byte> bytes, java.lang.String delimiter)
      Convert a bytes into a hexadecimal string.
      static java.lang.String convertBytesToString​(java.util.Iterator<java.lang.Byte> bytes, java.lang.String delimiter)
      Convert a bytes into a hexadecimal string.
      static java.lang.String convertBytesToString​(java.util.stream.Stream<java.lang.Byte> bytes, java.lang.String delimiter)
      Convert a bytes into a hexadecimal string.
      static void convertHexStringToMaskedValue​(java.util.concurrent.atomic.AtomicLong msk, java.util.concurrent.atomic.AtomicLong val, java.lang.String hex, int n, int spaceevery, java.lang.String spacer)
      static java.lang.String convertMaskedValueToHexString​(long msk, long val, int n, boolean truncate, int spaceevery, java.lang.String spacer)
      Convert a masked value into a hexadecimal-ish string.
      static java.lang.String convertMaskToHexString​(long msk, int n, boolean truncate, int spaceevery, java.lang.String spacer)
      Convert a mask to a hexadecimal-ish string.
      static byte[] convertStringToBytes​(java.lang.String hexString)
      Parse hexadecimal digits into a byte array.
      static java.lang.String formatNumber​(long number, int radix)
      Render number in different bases using the default signedness mode.
      static java.lang.String formatNumber​(long number, int radix, SignednessFormatMode mode)
      Provide renderings of number in different bases: 0 - renders number as an escaped character sequence 2 - renders number as a base-2 integer 8 - renders number as a base-8 integer 10 - renders number as a base-10 integer 16 (default) - renders number as a base-16 integer Number Radix DEFAULT Mode Alias UNSIGNED Mode Value SIGNED Mode Value   100 2 UNSIGNED 1100100b 1100100b 100 8 UNSIGNED 144o 144o 100 10 SIGNED 100 100 100 16 UNSIGNED 64h 64h   -1 2 UNSIGNED 1111111111111111111111111111111111111111111111111111111111111111b -1b -1 8 UNSIGNED 1777777777777777777777o -1o -1 10 SIGNED 18446744073709551615 -1 -1 16 UNSIGNED ffffffffffffffffh -1h   -100 2 UNSIGNED 1111111111111111111111111111111111111111111111111111111110011100b -1100100b -100 8 UNSIGNED 1777777777777777777634o -144o -100 10 SIGNED 18446744073709551516 -100 -100 16 UNSIGNED ffffffffffffff9ch -64h
      static long getUnsignedAlignedValue​(long unsignedValue, long alignment)
      Get an unsigned aligned value corresponding to the specified unsigned value which will be greater than or equal the specified value.
      static boolean isFloatingPointType​(java.lang.Class<?> numClass)
      Determine if the provided Number class is a floating-point type.
      static boolean isFloatingPointType​(java.lang.Number number)
      Determine if the provided Number is a floating-point type -- Float or Double.
      static boolean isIntegerType​(java.lang.Class<?> numClass)
      Determine if the provided Number class is an integer type.
      static boolean isIntegerType​(java.lang.Number number)
      Determine if the provided Number is an integer type -- Byte, Short, Integer, or Long.
      static java.math.BigInteger parseHexBigInteger​(java.lang.String numStr)  
      static long parseHexLong​(java.lang.String numStr)  
      static long parseLong​(java.lang.String numStr)
      parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      static long parseNumber​(java.lang.String numStr)
      parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      static long parseOctLong​(java.lang.String numStr)
      parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      static java.lang.String toHexString​(long value)
      returns the value of the specified long as hexadecimal, prefixing with the HEX_PREFIX_x string.
      static java.lang.String toHexString​(long value, int size)
      returns the value of the specified long as hexadecimal, prefixing with the HEX_PREFIX_x string.
      static java.lang.String toSignedHexString​(long value)
      returns the value of the specified long as signed hexadecimal, prefixing with the HEX_PREFIX_x string.
      static java.lang.String toString​(byte b)
      Convert the given byte into a two character String, padding with a leading 0 if needed.
      static java.math.BigInteger unsignedLongToBigInteger​(long value)
      Converts a unsigned long value, which is currently stored in a java signed long, into a BigInteger.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • MAX_UNSIGNED_LONG

        public static final java.math.BigInteger MAX_UNSIGNED_LONG
      • MAX_SIGNED_LONG

        public static final java.math.BigInteger MAX_SIGNED_LONG
      • MAX_UNSIGNED_INT32_AS_LONG

        public static final long MAX_UNSIGNED_INT32_AS_LONG
        See Also:
        Constant Field Values
    • Method Detail

      • parseNumber

        public static long parseNumber​(java.lang.String numStr)
        parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      • parseLong

        public static long parseLong​(java.lang.String numStr)
        parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      • parseOctLong

        public static long parseOctLong​(java.lang.String numStr)
        parses the given string as a numeric value, detecting whether or not it begins with a Hex prefix, and if not, parses as a long int value.
      • parseHexLong

        public static long parseHexLong​(java.lang.String numStr)
      • parseHexBigInteger

        public static java.math.BigInteger parseHexBigInteger​(java.lang.String numStr)
      • toHexString

        public static final java.lang.String toHexString​(long value)
        returns the value of the specified long as hexadecimal, prefixing with the HEX_PREFIX_x string.
        Parameters:
        value - the long value to convert
      • toHexString

        public static final java.lang.String toHexString​(long value,
                                                         int size)
        returns the value of the specified long as hexadecimal, prefixing with the HEX_PREFIX_x string.
        Parameters:
        value - the long value to convert
        size - number of bytes to be represented
      • toSignedHexString

        public static final java.lang.String toSignedHexString​(long value)
        returns the value of the specified long as signed hexadecimal, prefixing with the HEX_PREFIX_x string.
        Parameters:
        value - the long value to convert
      • unsignedLongToBigInteger

        public static java.math.BigInteger unsignedLongToBigInteger​(long value)
        Converts a unsigned long value, which is currently stored in a java signed long, into a BigInteger.

        In other words, the full 64 bits of the primitive java signed long is being used to store an unsigned value. This method converts this into a positive BigInteger value.

        Parameters:
        value - java unsigned long value stuffed into a java signed long
        Returns:
        new BigInteger with the positive value of the unsigned long value
      • bigIntegerToUnsignedLong

        public static long bigIntegerToUnsignedLong​(java.math.BigInteger value)
      • getUnsignedAlignedValue

        public static long getUnsignedAlignedValue​(long unsignedValue,
                                                   long alignment)
        Get an unsigned aligned value corresponding to the specified unsigned value which will be greater than or equal the specified value.
        Parameters:
        unsignedValue - value to be aligned
        alignment - alignment
        Returns:
        aligned value
      • convertMaskedValueToHexString

        public static java.lang.String convertMaskedValueToHexString​(long msk,
                                                                     long val,
                                                                     int n,
                                                                     boolean truncate,
                                                                     int spaceevery,
                                                                     java.lang.String spacer)
        Convert a masked value into a hexadecimal-ish string. Converts the data to hexadecimal, placing an X where a nibble is unknown. Where a nibble is partially defined, it is displayed as four bits in brackets []. Bits are displayed as x, or the defined value. For example, consider the mask 00001111:01011100, and the value 00001001:00011000. This will display as X8:[x0x1][10xx]. To see the correlation, consider the table:
        Display X 8 : [x0x1] [10xx]
        Mask 0000 1111 : 0101 1100
        Value 0000 1000 : 0001 1000
        Parameters:
        msk - the mask
        val - the value
        n - the number of nibbles, starting at the right. The example uses 4.
        truncate - true if leading Xs may be truncated. The example uses false.
        spaceevery - how many nibbles in spaced groups, 0 for no spaces. The example uses 2.
        spacer - the group separator, if applicable. The example uses ':'.
        Returns:
        the string representation
        See Also:
        convertMaskToHexString(long, int, boolean, int, String), convertHexStringToMaskedValue(AtomicLong, AtomicLong, String, int, int, String)
      • formatNumber

        public static java.lang.String formatNumber​(long number,
                                                    int radix,
                                                    SignednessFormatMode mode)
        Provide renderings of number in different bases:
        • 0 - renders number as an escaped character sequence
        • 2 - renders number as a base-2 integer
        • 8 - renders number as a base-8 integer
        • 10 - renders number as a base-10 integer
        • 16 (default) - renders number as a base-16 integer
        Number Radix DEFAULT Mode Alias UNSIGNED Mode Value SIGNED Mode Value
         
        100 2 UNSIGNED 1100100b 1100100b
        100 8 UNSIGNED 144o 144o
        100 10 SIGNED 100 100
        100 16 UNSIGNED 64h 64h
         
        -1 2 UNSIGNED 1111111111111111111111111111111111111111111111111111111111111111b -1b
        -1 8 UNSIGNED 1777777777777777777777o -1o
        -1 10 SIGNED 18446744073709551615 -1
        -1 16 UNSIGNED ffffffffffffffffh -1h
         
        -100 2 UNSIGNED 1111111111111111111111111111111111111111111111111111111110011100b -1100100b
        -100 8 UNSIGNED 1777777777777777777634o -144o
        -100 10 SIGNED 18446744073709551516 -100
        -100 16 UNSIGNED ffffffffffffff9ch -64h
        Parameters:
        number - The number to represent
        radix - The base in which number is represented
        mode - Specifies how the number is formatted with respect to its signed-ness
        Returns:
        number string in the given base
      • convertStringToBytes

        public static byte[] convertStringToBytes​(java.lang.String hexString)
        Parse hexadecimal digits into a byte array.
        Parameters:
        hexString - hexadecimal digits
        Returns:
        numeric value as a byte array, or null if string contains invalid hex characters.
      • toString

        public static java.lang.String toString​(byte b)
        Convert the given byte into a two character String, padding with a leading 0 if needed.
        Parameters:
        b - the byte
        Returns:
        the byte string
      • convertBytesToString

        public static java.lang.String convertBytesToString​(byte[] bytes)
        Convert a byte array into a hexadecimal string.
        Parameters:
        bytes - byte array
        Returns:
        hex string representation
      • convertBytesToString

        public static java.lang.String convertBytesToString​(byte[] bytes,
                                                            java.lang.String delimeter)
        Convert a byte array into a hexadecimal string.
        Parameters:
        bytes - byte array
        delimeter - the text between byte strings
        Returns:
        hex string representation
      • convertBytesToString

        public static java.lang.String convertBytesToString​(byte[] bytes,
                                                            int start,
                                                            int len,
                                                            java.lang.String delimeter)
        Convert a byte array into a hexadecimal string.
        Parameters:
        bytes - byte array
        start - start index
        len - number of bytes to convert
        delimeter - the text between byte strings
        Returns:
        hex string representation
      • convertBytesToString

        public static java.lang.String convertBytesToString​(java.util.Iterator<java.lang.Byte> bytes,
                                                            java.lang.String delimiter)
        Convert a bytes into a hexadecimal string.
        Parameters:
        bytes - an iterator of bytes
        delimiter - the text between byte strings; null is allowed
        Returns:
        hex string representation
      • convertBytesToString

        public static java.lang.String convertBytesToString​(java.lang.Iterable<java.lang.Byte> bytes,
                                                            java.lang.String delimiter)
        Convert a bytes into a hexadecimal string.
        Parameters:
        bytes - an iterable of bytes
        delimiter - the text between byte strings; null is allowed
        Returns:
        hex string representation
      • convertBytesToString

        public static java.lang.String convertBytesToString​(java.util.stream.Stream<java.lang.Byte> bytes,
                                                            java.lang.String delimiter)
        Convert a bytes into a hexadecimal string.
        Parameters:
        bytes - an stream of bytes
        delimiter - the text between byte strings; null is allowed
        Returns:
        hex string representation
      • isIntegerType

        public static boolean isIntegerType​(java.lang.Number number)
        Determine if the provided Number is an integer type -- Byte, Short, Integer, or Long.
        Parameters:
        number - the object to check for for integer-type
        Returns:
        true if the provided number is an integer-type, false otherwise
      • isIntegerType

        public static boolean isIntegerType​(java.lang.Class<?> numClass)
        Determine if the provided Number class is an integer type.
        Parameters:
        numClass - Class of an object
        Returns:
        true if the class parameter is a integer type, false otherwise
      • isFloatingPointType

        public static boolean isFloatingPointType​(java.lang.Number number)
        Determine if the provided Number is a floating-point type -- Float or Double.
        Parameters:
        number - the object to check for for floating-point-type
        Returns:
        true if the provided number is a floating-point-type, false otherwise
      • isFloatingPointType

        public static boolean isFloatingPointType​(java.lang.Class<?> numClass)
        Determine if the provided Number class is a floating-point type.
        Parameters:
        numClass - Class of an object
        Returns:
        true if the class parameter is a floating-point type, false otherwise