Package ghidra.util
Class NumericUtilities
- java.lang.Object
-
- ghidra.util.NumericUtilities
-
public final class NumericUtilities extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.math.BigInteger
MAX_SIGNED_LONG
static java.math.BigInteger
MAX_UNSIGNED_LONG
-
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)
Rendernumber
in different bases using the default signedness mode.static java.lang.String
formatNumber(long number, int radix, SignednessFormatMode mode)
Provide renderings ofnumber
in different bases: 0 - rendersnumber
as an escaped character sequence 2 - rendersnumber
as a base-2 integer 8 - rendersnumber
as a base-8 integer 10 - rendersnumber
as a base-10 integer 16 (default) - rendersnumber
base-16 integer NumberRadixDEFAULT Mode AliasUNSIGNED Mode ValueSIGNED Mode Value 1002UNSIGNED1100100b1100100b 1008UNSIGNED144o144o 10010SIGNED100100 10016UNSIGNED64h64h -12UNSIGNED1111111111111111111111111111111111111111111111111111111111111111b-1b -18UNSIGNED1777777777777777777777o-1o -110SIGNED18446744073709551615-1 -116UNSIGNEDffffffffffffffffh-1h -1002UNSIGNED1111111111111111111111111111111111111111111111111111111110011100b-1100100b -1008UNSIGNED1777777777777777777634o-144o -10010SIGNED18446744073709551516-100 -10016UNSIGNEDffffffffffffff9ch-64hstatic 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)
-
-
-
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 convertsize
- 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 final java.math.BigInteger unsignedLongToBigInteger(long value)
-
bigIntegerToUnsignedLong
public static final 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:
value
- value to be alignedalignment
- 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 asX8:[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 maskval
- the valuen
- the number of nibbles, starting at the right. The example uses 4.truncate
- true if leading Xs may be truncated. The example usesfalse
.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)
-
convertMaskToHexString
public 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. Converts the mask in a similar way toconvertMaskedValueToHexString(long, long, int, boolean, int, String)
. Philosophically, it is hexadecimal, but the only valid digits are 0 and F. Any partially-included nibble will be broken down into bracketed bits. Displaying masks in this way is convenient when shown proximal to related masked values.- Parameters:
msk
- the maskn
- the number of nibbles, starting at the righttruncate
- true if leading Xs may be truncatedspaceevery
- how many nibbles in spaced groups, 0 for no spacesspacer
- the group separator, if applicable- Returns:
- the string representation
- See Also:
convertMaskedValueToHexString(long, long, int, boolean, int, String)
,convertHexStringToMaskedValue(AtomicLong, AtomicLong, String, int, int, String)
-
convertHexStringToMaskedValue
public 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)
- Parameters:
msk
- an object to receive the resulting maskval
- an object to receive the resulting valuehex
- the input string to parsen
- the number of nibbles to parse (they are stored right aligned in the result)spaceevery
- how many nibbles are expected between spacersspacer
- the spacer- See Also:
convertMaskedValueToHexString(long, long, int, boolean, int, String)
,convertMaskToHexString(long, int, boolean, int, String)
-
formatNumber
public static java.lang.String formatNumber(long number, int radix)
Rendernumber
in different bases using the default signedness mode.This invokes formatNumber(long, int, SignednessFormatMode) with a mode parameter of SignednessFormatMode.DEFAULT.
- Parameters:
number
- The number to representradix
- the base in whichnumber
is represented- Returns:
- formatted string of the number parameter in provided radix base
- See Also:
formatNumber(long, int, SignednessFormatMode)
-
formatNumber
public static java.lang.String formatNumber(long number, int radix, SignednessFormatMode mode)
Provide renderings ofnumber
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
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 representradix
- The base in whichnumber
is representedmode
- Specifies how the number is formatted with respect to its signed-ness- Returns:
- number string in the given base
- 0 - renders
-
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 arraydelimeter
- 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 arraystart
- start indexlen
- number of bytes to convertdelimeter
- 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 bytesdelimiter
- 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 bytesdelimiter
- 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 bytesdelimiter
- 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
-
-