从大型机读取打包的十六进制数据并将其转换为十进制格式

时间:2013-03-20 10:42:58

标签: java hex

我正在做一个项目,使用Java将大型机的压缩十六进制数据转换为十进制/人类可读格式。但文件中的数据如下:

00011111112       201343    /…æ     
          &c                                               ï%                                                               “*   œ“fæ     —æ          r<   Ìð    
Œ    êŒ000000 000000          q@00000000                  ð                                                   
00011111112       201345    àr<         
          ™                                                                                                                 r<   Ìð     †          Ë…ð   Ë<    Êð    àã000000 000000          q00000000      @            %                                                   
00011111112       201346     Œ                ì                                                                                                                Ë…ð   Ë<         %          é-   ÅÇ    …e*    Äæ000000 000000          ræ00000000   @   Œ            

我不知道如何使用Java将其转换为十进制格式。我正在使用`wing作为UI部分。

任何人都可以帮助并向我提供任何算法或工作代码吗?

这是一组示例数据的屏幕截图,其中第一行表示打包的十六进制数据。接下来的2行代表转换后的数据。

2 个答案:

答案 0 :(得分:1)

您需要知道格式是什么,并使用字节。使用InputStream而不是Reader,请记住大型机可能使用EBCDIC而不是ASCII,并且mey $ DEITY可以帮助您灵魂。

严肃地说,你需要知道你想做什么的电线格式。首先找到它,它记录在某个地方。 (希望;它是一个大型机,所以谁知道)。

答案 1 :(得分:0)

也许你的意思是打包二进制编码的小数,BCD。

如您所知,一个字节是8位,可在基数16中表示,十六进制表示为两个十六进制数字0-9,A-F。 BCD现在将一个数字字符串编码为1234,一个十六进制字节为31,32,33,34的字符串,打包为12,34。

boolean fromBCD(byte ch) {
   (ch & 0xF) < 10 && ((ch >> 4) & 0xF) < 10;
}

int fromBCD(byte ch) {
   (ch & 0xF) + 10 * ((ch >> 4) & 0xF)
}