将 4 个字节转换为整型

2022-08-31 13:06:01

我正在阅读一个像这样的二进制文件:

InputStream in = new FileInputStream( file );
byte[] buffer = new byte[1024];
while( ( in.read(buffer ) > -1 ) {

   int a = // ??? 
}

我想做的是读取多达4个字节并从中创建一个int值,但是,我不知道该怎么做。

我觉得我必须一次抓取4个字节,然后执行一个“字节”操作(如>> << >>和FF之类的东西)来创建新的int

这是什么成语?

编辑

哎呀,这结果有点复杂(要解释)

我试图做的是,读取一个文件(可能是ascii,二进制,没关系),并提取它可能具有的整数。

例如,假设二进制内容(以2为基数):

00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010

整数表示应该是,对吧?:- / 1 表示前 32 位,2 表示剩余的 32 位。12

11111111 11111111 11111111 11111111

将是 -1

01111111 11111111 11111111 11111111

Integer.MAX_VALUE ( 2147483647 )


答案 1

ByteBuffer 具有此功能,并且能够同时处理小端和大端整数。

请考虑以下示例:


//  read the file into a byte array
File file = new File("file.bin");
FileInputStream fis = new FileInputStream(file);
byte [] arr = new byte[(int)file.length()];
fis.read(arr);

//  create a byte buffer and wrap the array
ByteBuffer bb = ByteBuffer.wrap(arr);

//  if the file uses little endian as apposed to network
//  (big endian, Java's native) format,
//  then set the byte order of the ByteBuffer
if(use_little_endian)
    bb.order(ByteOrder.LITTLE_ENDIAN);

//  read your integers using ByteBuffer's getInt().
//  four bytes converted into an integer!
System.out.println(bb.getInt());

希望这有帮助。


答案 2

如果它们已经放在 byte[] 数组中,则可以使用:

int result = ByteBuffer.wrap(bytes).getInt();

来源: 这里