微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

如何将一个数据类型十六进制的文本文件转换成

时间:2014-04-10 09:44  浏览:努力统计中...
在D盘上,有一个16进制的文本文件:ts.txt 用UE查看是如下: 58000000B81F0000F154C82A1BDFF3AA; A3B0CC0197521A004018B2DE14B80301; ........ 想用java将这个文件中16进制的数据转换成十进制并存储到tz.txt文件
在D盘上,有一个16进制的文本文件:ts.txt

用UE查看是如下:
58 00 00 00 B8 1F 00 00 F1 54 C8 2A 1B DF F3 AA ;
A3 B0 CC 01 97 52 1A 00 40 18 B2 DE 14 B8 03 01 ;
... .....

想用java将这个文件中16进制的数据转换成十进制并存储到tz.txt文件中。

补充:转换时需要按每60个字节读取。

I hope the code below is what you want.
Could you just describe your requirement much detail, like :
we have a data file, which is binary:
58 00 00 00 B8 1F 00 00 F1 54 C8 2A 1B DF F3 AA
I want it to be:
.......

In fact the 16 radix data you see is just a way for representation, you might want to see the result with 10 radix, but the value is still kept the same, correct?


BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
    in = new BufferedInputStream(new FileInputStream(FILENAME));
    out = new BufferedOutputStream(new FileOutputStream(FILEOUT));
    byte[] buff = new byte[60];
    int cnt = in.read(buff, 0, 60);
    for (int i =0; i < cnt; ++i) {
        String val = Byte.toString(buff[i]);
        out.write(Byte.valueOf(val, 10));
    }
} finally {
    if (null != in)
         in.close();
    if (null != out)
         out.close();
}


十进制数,在计算机里面,又分为,整型、长整型、浮点数、双精度浮点数、大数据类型等等。
不知道楼主要转换成哪一种类型的十进制数?
数字在计算机中存储是有一定的数据结构的,一般情况下,整型占4字节、长整型占8字节。。。
而且,转换后的文件要比转换前的体积要大。



是整型的。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;


public class Test_13 {

public static void main(String[] args) throws IOException {
File binFile = new File("D:\\tmp\\libbc-south-shared.so");
File outFile = new File("d:\\tmp\\out.txt");
FileChannel ch = new  FileInputStream(binFile).getChannel();
BufferedWriter out = new BufferedWriter(new FileWriter(outFile));
MappedByteBuffer buff = ch.map(MapMode.READ_ONLY, 0, binFile.length());

while(buff.remaining()>=4){
int data = buff.getInt();
out.write(String.valueOf(data));
out.write("\t");
}
out.flush();
ch.close();
out.close();
System.out.println(Integer.MAX_VALUE);
System.out.println(String.valueOf(Integer.MAX_VALUE).length());
}

}


十六进制转十进制:Integer.toString(字符串,16);



还原出来的十进制数据看不出实际的含义。这个文本文件是一个以十六进制储存的数据文件,含有很多条记录数。每条记录数的都是64个十六进制符,每一条记录都是以FF FF FF FF这样4个十六进制符开始,所以每条记录有效的十六进制符应该是60个。这60个十六进制符表示的是10个字段的数据,每个字段都是6个进制符。
用你的代码运行后得到的数据没有实际意义,原因可能是在读取每一条记录时,需要反着读取每6个十六进制符。
这样子的话,该怎么修改这个代码。nio这个包都没用过

对每条记录的每6个十六进制符反着读取就是比如:58 00 00 00 B8 1F,反向读取1F B8 00 00 00 58。
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------