1

Java を使用して、メインフレームのパックされた 16 進数データを 10 進数/人間が読める形式に変換するプロジェクトを行っています。しかし、ファイル内のデータは次のようになります。

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

Javaを使用してそれを10進数形式に変換する方法がわかりません。UI部分に`wingを使っています。

アルゴリズムや作業コードを教えてくれる人はいますか?

これは、最初の行がパックされた 16 進数データを表すサンプル データ セットのスクリーンショットです。次の 2 行は、変換されたデータを表します。

4

2 に答える 2

1

フォーマットが何であるかを知り、バイトを使用して作業する必要があります。メインフレームは ASCII の代わりに EBCDIC を使用する可能性があることを覚えておいてくださいInputStreamReader

真剣に、やりたいことのワイヤ形式を知る必要があります。最初にそれを見つけてください、それはどこかに文書化されています。(願わくば、それはメインフレームなので、誰にもわかりません)。

于 2013-03-20T10:55:59.137 に答える
0

おそらく、パック 2 進化 10 進数、BCD のことを意味しているのでしょう。

ご存じのように、1 バイトは 8 ビットで、基数 16 で表され、2 つの 16 進数 0 ~ 9、AF として 16 進数で表されます。BCD は、数値文字列を 1234 としてコード化するようになりました。これは、12、34 としてパックされた 16 進バイト 31、32、33、34 の文字列です。

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

int fromBCD(byte ch) {
   (ch & 0xF) + 10 * ((ch >> 4) & 0xF)
}
于 2013-06-15T12:50:05.063 に答える