我正在读这样的二进制文件:
InputStream in = new FileInputStream( file );
byte[] buffer = new byte[1024];
while( ( in.read(buffer ) > -1 ) {
int a = // ???
}
Run Code Online (Sandbox Code Playgroud)
我想做什么来读取最多4个字节并从那些创建一个int值但是,我不知道该怎么做.
我觉得我必须一次抓取4个字节,并执行一个"字节"操作(如>> << >>&FF和类似的东西)来创建新的int
这个成语是什么?
编辑
哎呀,结果有点复杂(解释)
我想要做的是,读取一个文件(可能是ascii,二进制,无所谓)并提取它可能具有的整数.
例如,假设二进制内容(在基数2中):
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010
Run Code Online (Sandbox Code Playgroud)
整数表示应该是1,2对吗?: - 前1位为32位,其余32位为2位.
11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
将是-1
和
01111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
将会 Integer.MAX_VALUE ( 2147483647 )
我需要接受成对字节,输出短路,并输入短路和输出字节对.以下是我为此目的设计的功能:
static short ToShort(short byte1, short byte2)
{
short number = (short)byte2;
number <<= 4;
number += (short)byte1;
return number;
}
static void FromShort(short number, out byte byte1, out byte byte2)
{
byte byte2 = (byte)(number >> 4);
short tempByte = (short)byte2 << 4;
byte byte1 = (byte)(number - tempByte);
}
Run Code Online (Sandbox Code Playgroud)
我认为这是正确的,但我不确定.如果这不是正确的方法,那是什么?有没有办法在框架中做到这一点?
我正在尝试将4个字节转换为32位无符号整数.
我想也许是这样的:
UInt32 combined = (UInt32)((map[i] << 32) | (map[i+1] << 24) | (map[i+2] << 16) | (map[i+3] << 8));
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有起作用.我错过了什么?