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:
转换很简单,但不知你的精确要求是什么:
1)这个二进制文件从第四个开始,是前面字节算低字节后面字节算高字节,还是反过来,前面字节算高字节后面算低字节?(Intel CPU 与如 SUN的CPU字节次序不同)
2)两个字节一算(short 或 char)还是4个字节一算(int)还是8个字节一算(long)?
问题要尽量精确些。

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