java的二进制文件操作问题

ispotato 2011-08-09 02:07:41
有一个二进制文件,用16进制记事本打开,内容为:“66 2F 93 00 15 88 D2 02 42 2F 93 00 40 57 01”

现要把每个“2F 93”后面的4个数值:“00 15 88 D2”和“00 40 57 01”,找出,并计算其对应的10进制数值,
java如何实现呢?

另外,存放“00 15 88 D2”对应的10进制数值的是无符号长整型,在c语言中是__int64或 unsigned long long int,在java中对应何种类型呢?
谢谢!
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
softroad 2011-08-10
  • 打赏
  • 举报
回复
FileInpuetStream fis = new FileInputStream(your_file);
int c;
while ((c=fis.read()) != -1) {
if (c == 0x2F) {
c = fis.read();
if (c == -1) {break;}
if (c == 0x93) {
byte[] b = new byte[4];
c = fis.read(b);
if (c == -1) {break;}
long l = 0;
for (int i=0; i<b.length; i++) {
l = (l<<4) | b[i]; //不知道存储的是从高位到低位还是低位到高位,LZ自己调整吧
}
System.out.println(l);
}
}
}
qybao 2011-08-09
  • 打赏
  • 举报
回复
按字节读入文件
FileInpuetStream fis = new FileInputStream(your_file);
int c;
while ((c=fis.read()) != -1) {
if (c == 0x2a) {
c = fis.read();
if (c == -1) {break;}
if (c == 0x93) {
byte[] b = new byte[4];
c = fis.read(b);
if (c == -1) {break;}
long l = 0;
for (int i=0; i<b.length; i++) {
l = (l<<4) | b[i]; //不知道存储的是从高位到低位还是低位到高位,LZ自己调整吧
}
System.out.println(l);
}
}
}
liruohan123 2011-08-09
  • 打赏
  • 举报
回复
打酱油的。。。。。
magong 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 ispotato 的回复:]
有一个二进制文件,用16进制记事本打开,内容为:“66 2F 93 00 15 88 D2 02 42 2F 93 00 40 57 01”

现要把每个“2F 93”后面的4个数值:“00 15 88 D2”和“00 40 57 01”,找出,并计算其对应的10进制数值,
java如何实现呢?

另外,存放“00 15 88 D2”对应的10进制数值的是无符号长整型,在c语言中是__i……
[/Quote]
参考下面的代码,开文件流is之类的代码楼主就自己写了吧。

DataInputStream dis = new DataInputStream( is);
while (true){
while (dis.readByte()!=0x2F);
if (dis.readByte()==(byte)0x93){
long number = dis.readInt() & 0xFFFFFFFFL;
System.out.println("找到一个数:" + number);
}
}
想喝咖啡的貓 2011-08-09
  • 打赏
  • 举报
回复
short、int、long与byte之间的转换工具类(Java)
http://blog.csdn.net/afer198215/article/details/6656753


static void t7(){
byte[] bys = new byte[]{0x00,0x15,(byte) 0x88,(byte) 0xd2};

System.out.println(Utility.byte2Int(bys));
}
softroad 2011-08-09
  • 打赏
  • 举报
回复
最好打印出具体数据,分析下结构,然后再操作,主要用到有String.indexOf, String.substring, Long.parseLong
ispotato 2011-08-09
  • 打赏
  • 举报
回复
谢谢大家回帖,我可以先用java的long试一下,请问

读取文件中每个“2F 93”后面的4个数值:“00 15 88 D2”和“00 40 57 01”,找出,并计算其对应的10进制数值,在java中如何实现呢?最好能给出java代码,谢谢各位!

想喝咖啡的貓 2011-08-09
  • 打赏
  • 举报
回复
__int64 对应的就是java的long.
但是我看到楼主好象只用了4个字节。 int32_t就够了。
但是,C写的文件Java不一定能转回来。
magong 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 ispotato 的回复:]
另外,存放“00 15 88 D2”对应的10进制数值的是无符号长整型,在c语言中是__int64或 unsigned long long int,在java中对应何种类型呢?
[/Quote]
4个字节32 bit,是Java int的长度,但如果需要无符号,则需要升级为long类型才能表示。
softroad 2011-08-09
  • 打赏
  • 举报
回复
用流读入下,然后按长度检索,计算,不知可行不。
softroad 2011-08-09
  • 打赏
  • 举报
回复
无符号用long吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧