x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 269

# How to convert a byte[] to an integer

I have a byte[] with four bytes!
for example:
byte [] k={23,39,23,40}
how to convert k[] to an integer?
0
liluqun
• 3
• 2
1 Solution

Analyst ProgrammerCommented:
For LittleEndian:

byte[] k={23,39,23,40};
int y=0;

y=k[0];
for (int i=1; i<4; i++) {
y = y << 8;
y += k[i];
}

For BigEndian:
byte[] k={23,39,23,40};
int y=0;

y=k[3];
for (int i=2; i>=0; i--) {
y = y << 8;
y += k[i];
}

0

Commented:
Or, not worying about manual conversion, like

byte[] byteArray = {1, 2, 3, 4, 4, 5, 6};
int value = -1; // -1 considered as invalid value for this operation.
try {
value = Integer.parseInt(new String(byteArray));
} catch(Exception e) {
value = -1;
}
0

Analyst ProgrammerCommented:
Ovi, your method does not work.
0

Commented:
Sorry about that, I've tested myself after I posted. Please ignore the comment.
0

Author Commented:
Now try this code:
===========================================
import java.io.*;

public class Test {

public Test() {
}
public static void main(String[] args) {
Test test1 = new Test();
try {
RandomAccessFile rf=new RandomAccessFile("d:\\ok.txt","rw");
rf.writeInt(777678);
rf.close();
}
catch (Exception ex) {
System.out.print(ex);
}

}
}
===============================================
After run the above code , we can get a 4-bytes file!
Now we use bytes arrarys to restore the integer777678,
I know use rf.readInt() can restore the integer 777687 at easy,this time ,suppose I can get a byte arrary from the 4-bytes file ok.txt
Now retore it with the following code:
===============================================
import java.io.*;

public class Test {

public Test() {
}
public static void main(String[] args) {
Test test1 = new Test();
try {
RandomAccessFile rf=new RandomAccessFile("d:\\ok.txt","rw");
// rf.writeByte();
//rf.writeInt(777678);
byte [] w=new byte[4];
int y=0;

y=w[0];
for (int i=1; i<4; i++) {
y = y << 8;
y += w[i];
}

System.out.print(y);
rf.close();
}
catch (Exception ex) {
System.out.print(ex);
}

}
}
============================
we can only get: an integer:711886
not 777678!!
Why
0

Analyst ProgrammerCommented:
This is because "byte" is 8-bit 2's complement.

Here is a working version:

if (w[0] < 0)
y += 256;       // 2^8 = 256
y=w[0];
for (int i=1; i<4; i++) {
y = y << 8;
if (w[i] < 0)
y+=256;
y += w[i];
}
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.