我是想用java读取一个用C 写的二进制文件,读出来的就是错的,想着先读取一个int然后进行位运算重新组成一个int输出,如此循环。从文件中读取4个字节,然后进行位运算,我不是很懂这个,自己想着写了一些代码求教:FileInputStream readFile=new FileInputStream("D:/haier.bin");
DataInputStream dos=new DataInputStream(readFile);
byte[] i=new byte[4];
int readI=0;
while((readI=dos.read(i))!=-1){
byte byte4 = (byte) (readI & 0xff);
byte byte3 = (byte) ((readI & 0xff00) >> 8);
byte byte2 = (byte) ((readI & 0xff0000) >> 16);
byte byte1 = (byte) ((readI & 0xff000000) >> 24);
int real=(byte1& 0xff)<<0 + (byte2& 0xff)<<8 + (byte3& 0xff)<< 16 +(byte4& 0xff)<<24;
System.out.println(Integer.toBinaryString(real));
}
dos.close();javabyte位运算
DataInputStream dos=new DataInputStream(readFile);
byte[] i=new byte[4];
int readI=0;
while((readI=dos.read(i))!=-1){
byte byte4 = (byte) (readI & 0xff);
byte byte3 = (byte) ((readI & 0xff00) >> 8);
byte byte2 = (byte) ((readI & 0xff0000) >> 16);
byte byte1 = (byte) ((readI & 0xff000000) >> 24);
int real=(byte1& 0xff)<<0 + (byte2& 0xff)<<8 + (byte3& 0xff)<< 16 +(byte4& 0xff)<<24;
System.out.println(Integer.toBinaryString(real));
}
dos.close();javabyte位运算
byte[] buff = new byte[4];
if(4!=fis.read(buff)){
throw new IllegalStateException("读取文件数据出错");
}
int data = (buff[0]&0xFF)<<24 | (buff[1]&0xFF)<<16 | (buff[2]&0xFF)<<8 | (buff[3]&0xFF);
//data就是文件中的整型数据。
以下是我之前想实现的代码:try{
FileInputStream readFile=new FileInputStream("D:/h.bin");
DataInputStream dos=new DataInputStream(readFile);
byte[] i=new byte[4];
int readI;
while((readI=dos.read(i))!=-1){
byte byte1 = i[0];
byte byte2 = i[1];
byte byte3 = i[2];
byte byte4 = i[3];
int real=(byte1& 0xff)<<0 |(byte2& 0xff)<<8 | (byte3& 0xff)<< 16 |(byte4& 0xff)<<24;
System.out.println(real);
}
dos.close();
我就纳闷了 你连C的编码格式都知道 你会不知道这些
你是大智若愚吗
我就一个java新手。
不知道怎么把转换成的int写到一个int数组中,求教
byte byte1 = i[0];
byte byte2 = i[1];
byte byte3 = i[2];
byte byte4 = i[3];
List<Integer> list = new ArrayList<Integer>() ;
int real=(byte1& 0xff)<<0 |(byte2& 0xff)<<8 | (byte3& 0xff)<< 16 |(byte4& 0xff)<<24;
System.out.println(real);
list.add(real) ;
}
这样就可以了