Topic: [j2se]哪位高人看一下,该如何处理。 |
Print this page |
1.[j2se]哪位高人看一下,该如何处理。 | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-27 16:59 哪位高人看一下,该如何处理: 附件为一二进制文件,现在要将其转换成十进制。 文件说明:前三个Byte为ASCII码,其余要将Binary转成Decimal。低字节加上高字节即为转换结果。 感谢高手帮忙!!!! 01152358.414 (8.82k) |
2.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-28 12:55 高人帮个忙吧。 |
3.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-28 14:41 转换很简单,但不知你的精确要求是什么: 1)这个二进制文件从第四个开始,是前面字节算低字节后面字节算高字节,还是反过来,前面字节算高字节后面算低字节?(Intel CPU 与如 SUN的CPU字节次序不同) 2)两个字节一算(short 或 char)还是4个字节一算(int)还是8个字节一算(long)? 问题要尽量精确些。 |
4.Re:[j2se]哪位高人看一下,该如何处理。 [Re: jiangns3000] | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-28 15:15 jiangns3000 wrote: jiangns3000老兄,谢谢你了!^_^ 具体要求如下: 1)这个二进制文件从第四个开始,前面字节算低字节后面字节算高字节,(Intel CPU 与如 SUN的CPU字节次序不同,多谢相告!) 2)两个字节一算(short 或 char)[color=Red] |
5.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-29 01:26 转换后的文件在附件中。 转换的JAVA源程序如下: import java.io.*; public class Trans { public static void main(String[] args) { try{ PrintWriter pw = new PrintWriter(new FileWriter("d:\\test.414"),true); DataInputStream ds = new DataInputStream( new FileInputStream("d:\\01152358.414")); byte b; short sh; int left,right; int cc=4;//cc用于控制每行输出15个数,数之间用空格分隔 b = ds.readByte(); pw.print((char)b); //第一个ASCII b = ds.readByte(); pw.print((char)b); //第二个ASCII b = ds.readByte(); pw.print((char)b); //第三个ASCII pw.print(' '); while (ds.available() >0) { left = ds.readByte(); right= ds.readByte(); sh=(short)( (right&0x000000ff)<<8 | (left&0x000000ff) ); pw.print(sh); pw.print(' ') ; cc=cc+2; if (cc>=30){cc=0;pw.println();} } pw.flush() ; ds.close(); pw.close() ; } catch(java.io.EOFException e1){} catch(FileNotFoundException e2){} catch(IOException e3){} } } 注:从转换结果看,你所提问题似乎无意义。 test.414 (17.74k) |
6.Re:[j2se]哪位高人看一下,该如何处理。 [Re: jiangns3000] | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-29 10:00 jiangns3000老兄:你好! 该程序与所期望的结果有点出入:其实该二进制文件包含N410开头,后面跟1000个数据,N411后面跟1000个数据,。。。。N418后面跟1000个数据。 转换上有点麻烦,所以想请高手帮忙。该文件用UltraEdit等查看,结构会比较清楚。 恳请高手再帮忙帮忙。谢谢!^_^ 可否告知email,好向你多多请教。 dingsc@etang.com |
7.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-29 10:16 你只说明前三字节是ASCII,其余均为二进制。我当然用UEdit查看过,发现N41x的情况,但你要求很明确:前三个是ASCII(现在看,这个说法还是错,应是前四个是ASCII)其余均转换。故我按你要求转换。(当然将“其余”中的N41x也转换成十进制了。) 若你能保证每1000个数据之中不会出现N41x(即引导符N41x用于引导及区别数据的---我的猜测),则转换也容易处理。若1000个数据中也可能含有引导符N41x,则由于有二义性,处理复杂些。 |
8.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-29 11:13 按照你的新的要求转换程序如下:(结果在附件中。若原来的01152358.414中数据正确,则转换后结果正确。已核查过转换结果。) import java.io.*; public class Trans { static boolean isFlag(int val) {int i=0x4E343130; int j; for(j=0;j<=18;j++)//N410--N418 if(val==i+j) return true; return false; } static short transval(short val) { int left,right; right=val & 0x00ff; left=val & 0xff00; return (short) ( (right<<8) |( left>>>8) ); } public static void main(String[] args) { try{ PrintWriter pw = new PrintWriter(new FileWriter("d:\\test.414"),true); DataInputStream ds = new DataInputStream( new FileInputStream("d:\\01152358.414")); short sh; int left,right,flag,cc; while (ds.available() >0) { flag=ds.readInt() ; if( isFlag(flag)) { pw.println(); pw.print((char) ((flag&0xff000000)>>>24 )); pw.print((char) ((flag&0x00ff0000)>>>16 )); pw.print((char) ((flag&0x0000ff00)>>>8 )); pw.print((char) (flag&0x000000ff) ); pw.print(' ') ; } else { pw.print(transval( (short)((flag&0xffff0000)>>>16) )) ; pw.print(' ') ; pw.print(transval( (short)(flag&0x0000ffff) )) ; pw.print(' ') ; } } pw.flush() ; ds.close(); pw.close() ; } catch(java.io.EOFException e1){} catch(FileNotFoundException e2){} catch(IOException e3){} } } test.414 (15.25k) |
9.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-29 11:18 现在看来结果有意义了,尽管我不懂这些数据的含义。从这问题中,又一次验证了双方之间的需求表达与理解不容易。(理解有误差) |
10.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-29 23:46 jiangns3000老兄,谢谢你了!^_^ 现在看来结果应该是正确的,真是高人! 以后碰到问题,可否向老师请教。 我是刚接触JAVA的,可要仰仗高人指点。 再次说声谢谢! 祝一切顺利! |
11.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: dingsc Posted on: 2003-03-29 23:53 以后提问题尽量详细一点,这样可减少理解上的误差。 可以让那些愿意伸出援助之手的高人们更快的帮助你解决问题。 |
12.Re:[j2se]哪位高人看一下,该如何处理。 [Re: dingsc] | Copy to clipboard |
Posted by: jiangns3000 Posted on: 2003-03-30 09:33 我不是个高人,只是一个可能的话为别人提供力所能及的帮助的人,并对www.cjsdn.com贡献我一份力的人而已。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |