Storing Value as a Short - java

I am not sure why I keep getting this error but I was hoping someone could help me. I am trying to work on a partial MIPS disassembler program in Java but when trying to store my I format offset (16 Bits) I get an error message(Stars where the error occurs):
private short offset;
public void setOffset (String binary) {
**short s = Short.parseShort(this.binary.substring(15, 31),16);**
offset = s;
}
public short getOffset(){
return offset;
}
This is th error message I get:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1000000000001100"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Short.parseShort(Unknown Source)
at HexI.setOffset(HexI.java:65)
at MipsDisassembler.main(MipsDisassembler.java:31)
Essentially I would like to store it as a short and use bitwise operators to return a hex value

short s = Short.parseShort(this.binary.substring(15, 31),16);
You are specifying radix 16 (hexadecimal) for the input when in actuality it should be 2 since the input is binary.
It should be
short s = Short.parseShort(this.binary.substring(15, 31),2);
^

Related

input string cannot be parsed to integer in java [duplicate]

This question already has answers here:
java.lang.NumberFormatException: For input string
(7 answers)
Closed 5 years ago.
i have following numbers saved in array (readed from XML files):
100000000000008261
100000000000008266
100000000000008267
100000000000008268
The SeqNrList is filled by this:
ArrayList SeqNrList = new ArrayList<>();
SeqNrList.add(doc.getElementsByTagName("SequenceNumber").item(0).getTextContent());
I've try to get the minimum and maximum value with following code:
int seqsizemin = Integer.parseInt((String) Collections.min(SeqNrList));
int seqsizemax = Integer.parseInt((String) Collections.max(SeqNrList));
Also, i've try'd with following:
int seqsizemin = Integer.valueOf((String) Collections.min(SeqNrList));
int seqsizemax = Integer.valueOf((String) Collections.max(SeqNrList));
But i got only following error when i run my script:
Exception in thread "main" java.lang.NumberFormatException: For input string: "100000000000008261"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at ReadXMLFile.main(ReadXMLFile.java:117)
Is there any special function needed, why i cant save
According to the JavaDoc of Integer#parseInt():
An exception of type NumberFormatException is thrown if any of the following situations occurs: [...] The value represented by the string is not a value of type int.
Any number which can not be parsed into an int is invalid.
In your case is the number 100000000000008261 larger than the 32-Bit Integer of Java. That's why you're getting the error.
To go arround this, have a look at Long#parseLong():
long seqsizemin = Long.parseLong((String) Collections.min(SeqNrList));
long seqsizemax = Long.parseLong((String) Collections.max(SeqNrList));
You need to remember that integer data types can hold value requiring up to 32 bits, the values from your example require more than 32 bits to be represented, using Long.parseLong could give you the value represented as long and in case you need to handle bigger values, take a look to BigInteger.

Getting number format exception [duplicate]

This question already has answers here:
java.lang.NumberFormatException: For input string
(7 answers)
Closed 6 years ago.
I am doing simple conversion from string to int but getting number format exception :
I have use below java Program :
String cId = "7000000141";
int iCid = Integer.parseInt(cId);
System.out.println(iCid);
Getting below exception :
Exception in thread "main" java.lang.NumberFormatException: For input string: "7000000141"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:459)
at java.lang.Integer.parseInt(Integer.java:497)
Why I am getting the above exception?
That's because it's out of range of integer. The maximum allowed value for integer is 2147483647
In Java, following are the minimum and maximum values.
width minimum maximum
int: 32 bit -2 147 483 648 +2 147 483 647
long: 64 bit -9 223 372 036 854 775 808 +9 223 372 036 854 775 807
source
Use a 'long' datatype instead
public class HelloWorld
{
public static void main(String[] args)
{
String cId = "7000000141";
long iCid = Long.parseLong(cId);
System.out.println(iCid);
}
}

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "11101110110100011110111011010001"

I wanna convert String to Binary Integer like this int k = 0B1101.....0111
and the error showen is :
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "11101110110100011110111011010001"
String a = "1110111011010001",
b = "11101110110101010110111011010001";
int K = Integer.parseInt(a.trim(),2);
int T = Integer.parseInt(b.trim(),2);
You get an exception because the 32-bit number that you pass represents a negative integer, so from parseInt's perspective it overflows an int.
You have two solutions to parse the number:
(1) Pass a negative representation with a minus sign, i.e.
System.out.println(Integer.parseInt("-0010001001011100001000100101111", 2));
or (2) pass the original number to parseLong, and cast the result to int, i.e.
System.out.println((int)Long.parseLong("11101110110100011110111011010001", 2));
Both snippets produce a negative value of -288231727 (demo).
This is because its above the Integer Limits of java.
Try using long instead of int.

java.lang.NumberFormatException in my binary progam

I'm really new to Java so excuse my ignorance, but I cannot figure out why my program keeps throwing an error every single time. I'm making a program that converts a string into binary and back. Here's my error. I've tried all sorts of different methods but it always throws the same error. :(
Exception in thread "main" java.lang.NumberFormatException: For input string: "010000010001011110010000000010001000"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at main.main(main.java:64)
Here's my line of code.
int charCode = Integer.parseInt(String.valueOf(binary), 2);
Binary is used with StringBuilder if you were wondering.
Thanks in advance! :)
PS I did try and find similar problems such as mine but to no avail.
Try:
long charCode = Long.parseLong(String.valueOf(binary), 2);
Your binary value more than Integer.MAX_VALUE
Integer in Java (and almost all other programming languages) is 4 bytes long, it means it can only stores ~4 300 000 000 numbers, with negative numbers, it is ~ -2 147 000 000 to +2 147 000 000
Number you are inputing is just too big for parsing it into Integer.
Also I do not see any reason why you should parse binary code into integer. This should do the trick:
String binaryInput = "10000010001011110010000000010001000";
long myNumber = 0;
for (int i = binaryInput.length()-1; i >= 0; i--) {
if (binaryInput.charAt(i) == '1') {
myNumber += Math.pow(2, binaryInput.length() - i - 1);
}
}
System.out.println("And the value is: " + myNumber);
Output:
And the value is: 17473011848
How about BigInteger with base '2' ?? Single line of code....
String str = "010000010001011110010000000010001000";
System.out.println(new BigInteger(str, 2));

parseInt throws error

I have this small piece of code in java which throws the following error when the code is run
Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
at java.lang.Integer.parseInt(Integer.java:527)
at hello.main(hello.java:6)
public class hello {
public static void main(String args[])
{
int x = 1024;
String h = Integer.toString(x, 2);
int xx = 9*(Integer.parseInt(h));
System.out.println(xx);
}
}
I suspect that this problem is related to the size of the values/parseInt. Can you please explain the reason for this error to me in detail.
This is because this surpasses the maximum value for an integer of 2,147,483,647
You are getting java.lang.NumberFormatException: For input string: "10000000000" because it exceed the range of int.
integer is a signed 32-bit type that has a range from –2,147,483,648 to 2,147,483,647.
long is a signed 64-bit type and is useful for those occasions where an int type is not large enough to hold the desired value, range is from –9,223,372,036,854,775,808 to
9 ,223,372,036,854,775,807. This makes it useful when big, whole numbers are needed.
Try this line of code-
long xx = 9*(Long.parseLong(h));
You are receiving this error because you are trying to parse a value too large for the Integer type. Try using Long instead.

Categories

Resources