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 long
MAX_UNSIGNED_INT32_AS_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 sequence2
- rendersnumber
as abase-2
integer8
- rendersnumber
as abase-8
integer10
- rendersnumber
as abase-10
integer16
(default) - rendersnumber
as abase-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 -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)
Converts a unsigned long value, which is currently stored in a java signed long, into aBigInteger
.
-
-
-
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 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 java.math.BigInteger unsignedLongToBigInteger(long value)
Converts a unsigned long value, which is currently stored in a java signed long, into aBigInteger
.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 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 ofSignednessFormatMode.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
- rendersnumber
as an escaped character sequence2
- rendersnumber
as abase-2
integer8
- rendersnumber
as abase-8
integer10
- rendersnumber
as abase-10
integer16
(default) - rendersnumber
as abase-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
-
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
-
-