将4个字节转换为int

我正在读取这样的二进制文件:


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,2对吧?:-/前32位为1,其余32位为2。


11111111 11111111 11111111 11111111

将为-1



01111111 11111111 11111111 11111111

将会 Integer.MAX_VALUE ( 2147483647 )


慕雪6442864
浏览 1345回答 3
3回答

Smart猫小萌

如果您已经将它们放置在byte []数组中,则可以使用:int result = ByteBuffer.wrap(bytes).getInt();

紫衣仙女

您应该将其放入这样的函数中:public static int toInt(byte[] bytes, int offset) {&nbsp; int ret = 0;&nbsp; for (int i=0; i<4 && i+offset<bytes.length; i++) {&nbsp; &nbsp; ret <<= 8;&nbsp; &nbsp; ret |= (int)bytes[i] & 0xFF;&nbsp; }&nbsp; return ret;}例:byte[] bytes = new byte[]{-2, -4, -8, -16};System.out.println(Integer.toBinaryString(toInt(bytes, 0)));输出:11111110111111001111100011110000这样可以避免用完字节并正确处理负字节值。我不知道执行此操作的标准功能。要考虑的问题:字节序:不同的CPU架构按不同的顺序放置构成int的字节。根据开始时字节数组的方式,您可能会为此担心。和缓冲:如果您一次抓取1024个字节并在元素1022处开始一个序列,则在获得4个字节之前将到达缓冲区的末尾。最好使用某种形式的缓冲输入流来自动进行缓冲,这样您就可以readByte()重复使用而不必担心。尾随缓冲区:输入的末尾可能是字节数不均(具体来说不是4的倍数),具体取决于源。但是,如果您创建的输入开头是“保证”(或至少是前提条件)的4的倍数,则可能无需担心。为了进一步详细说明缓冲点,请考虑BufferedInputStream:InputStream in = new BufferedInputStream(new FileInputStream(file), 1024);现在,您有了一个InputStream可自动一次缓冲1024个字节的,处理起来不那么麻烦了。这样,您可以一次愉快地读取4个字节,而不必担心过多的I / O。其次,您还可以使用DataInputStream:InputStream in = new DataInputStream(new BufferedInputStream(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new FileInputStream(file), 1024));byte b = in.readByte();甚至:int i = in.readInt();完全不用担心构造int。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java