Package ghidra.util
Class NumericUtilities
java.lang.Object
ghidra.util.NumericUtilities
-
Field Summary
Modifier and TypeFieldDescriptionstatic final BigInteger
static final long
static final BigInteger
-
Method Summary
Modifier and TypeMethodDescriptionstatic long
static String
convertBytesToString
(byte[] bytes) Convert a byte array into a hexadecimal string.static String
convertBytesToString
(byte[] bytes, int start, int len, String delimeter) Convert a byte array into a hexadecimal string.static String
convertBytesToString
(byte[] bytes, String delimeter) Convert a byte array into a hexadecimal string.static String
convertBytesToString
(Iterable<Byte> bytes, String delimiter) Convert a bytes into a hexadecimal string.static String
convertBytesToString
(Iterator<Byte> bytes, String delimiter) Convert a bytes into a hexadecimal string.static String
convertBytesToString
(Stream<Byte> bytes, String delimiter) Convert a bytes into a hexadecimal string.static void
convertHexStringToMaskedValue
(AtomicLong msk, AtomicLong val, String hex, int n, int spaceevery, String spacer) static String
convertMaskedValueToHexString
(long msk, long val, int n, boolean truncate, int spaceevery, String spacer) Convert a masked value into a hexadecimal-ish string.static String
convertMaskToHexString
(long msk, int n, boolean truncate, int spaceevery, String spacer) Convert a mask to a hexadecimal-ish string.static byte[]
convertStringToBytes
(String hexString) Parse hexadecimal digits into a byte array.static BigInteger
Decode a big integer in hex, binary, octal, or decimal, based on the prefix 0x, 0b, or 0.static String
formatNumber
(long number, int radix) Rendernumber
in different bases using the default signedness mode.static 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
(Class<?> numClass) Determine if the provided Number class is a floating-point type.static boolean
isFloatingPointType
(Number number) Determine if the provided Number is a floating-point type -- Float or Double.static boolean
isIntegerType
(Class<?> numClass) Determine if the provided Number class is an integer type.static boolean
isIntegerType
(Number number) Determine if the provided Number is an integer type -- Byte, Short, Integer, or Long.static BigInteger
Parses the given hex string as a BigIntge value, detecting whether or not it begins with a hex prefix, and if not, parses as a long int value.static long
Parses the given string as a hex long value, detecting whether or not it begins with a hex prefix, and if not, parses as a long int value.static int
Parses the given decimal/hex string as anint
value.static long
Parses the given decimal/hex string as along
value.static long
parseNumber
(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
(String s, Long defaultValue) 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 final String
toHexString
(long value) returns the value of the specified long as hexadecimal, prefixing with theHEX_PREFIX_x
string.static final String
toHexString
(long value, int size) returns the value of the specified long as hexadecimal, prefixing with theHEX_PREFIX_x
string.static final String
toSignedHexString
(long value) returns the value of the specified long as signed hexadecimal, prefixing with theHEX_PREFIX_x
string.static String
toString
(byte b) Convert the given byte into a two character String, padding with a leading 0 if needed.static BigInteger
unsignedLongToBigInteger
(long value) Converts a unsigned long value, which is currently stored in a java signed long, into aBigInteger
.static double
unsignedLongToDouble
(long val) Convert a long, treated as unsigned, to a double
-
Field Details
-
MAX_UNSIGNED_LONG
-
MAX_SIGNED_LONG
-
MAX_UNSIGNED_INT32_AS_LONG
public static final long MAX_UNSIGNED_INT32_AS_LONG- See Also:
-
-
Method Details
-
parseNumber
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.- Parameters:
numStr
- the number string- Returns:
- the long value or 0
-
parseNumber
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.- Parameters:
s
- the string to parsedefaultValue
- the default value to use if the string cannot be parsed- Returns:
- the long value
-
parseInt
Parses the given decimal/hex string as anint
value. This method allows values with the top bit set to be implicitly parsed as negative values.- Parameters:
s
- the string to parse- Returns:
- the
int
value, or 0 if the string to parse is null or blank - Throws:
NumberFormatException
- if the string does not represent a validint
value
-
parseLong
Parses the given decimal/hex string as along
value. This method allows values with the top bit set to be implicitly parsed as negative values.- Parameters:
s
- the string to parse- Returns:
- the
long
value, or 0 if the string to parse is null or blank - Throws:
NumberFormatException
- if the string does not represent a validlong
value
-
parseHexLong
Parses the given string as a hex long value, detecting whether or not it begins with a hex prefix, and if not, parses as a long int value.- Parameters:
s
- the string to parse- Returns:
- the long value
- Throws:
NumberFormatException
- if the string is blank
-
parseHexBigInteger
Parses the given hex string as a BigIntge value, detecting whether or not it begins with a hex prefix, and if not, parses as a long int value.- Parameters:
s
- the string to parse- Returns:
- the long value
- Throws:
NumberFormatException
- if the string is blank
-
decodeBigInteger
Decode a big integer in hex, binary, octal, or decimal, based on the prefix 0x, 0b, or 0.This checks for the presence of a case-insensitive prefix. 0x denotes hex, 0b denotes binary, 0 denotes octal. If no prefix is given, decimal is assumed. A sign +/- may immediately precede the prefix. If no sign is given, a positive value is assumed.
- Parameters:
s
- the string to parse- Returns:
- the decoded value
-
toHexString
returns the value of the specified long as hexadecimal, prefixing with theHEX_PREFIX_x
string.- Parameters:
value
- the long value to convert- Returns:
- the string
-
toHexString
returns the value of the specified long as hexadecimal, prefixing with theHEX_PREFIX_x
string.- Parameters:
value
- the long value to convertsize
- number of bytes to be represented- Returns:
- the string
-
toSignedHexString
returns the value of the specified long as signed hexadecimal, prefixing with theHEX_PREFIX_x
string.- Parameters:
value
- the long value to convert- Returns:
- the string
-
unsignedLongToBigInteger
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
-
unsignedLongToDouble
public static double unsignedLongToDouble(long val) Convert a long, treated as unsigned, to a double- Parameters:
val
- the long to treat as unsigned and convert- Returns:
- the double
-
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 String convertMaskedValueToHexString(long msk, long val, int n, boolean truncate, int spaceevery, 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
public static String convertMaskToHexString(long msk, int n, boolean truncate, int spaceevery, 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:
-
convertHexStringToMaskedValue
public static void convertHexStringToMaskedValue(AtomicLong msk, AtomicLong val, String hex, int n, int spaceevery, 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:
-
formatNumber
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
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
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
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
Convert a byte array into a hexadecimal string.- Parameters:
bytes
- byte array- Returns:
- hex string representation
-
convertBytesToString
Convert a byte array into a hexadecimal string.- Parameters:
bytes
- byte arraydelimeter
- the text between byte strings- Returns:
- hex string representation
-
convertBytesToString
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
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
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
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
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
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
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
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
-