- PR -

バイナリデータを文字出力したいのですが。。

1
投稿者投稿内容
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-02-12 11:48
こんにちは。はまのっぷーといいます。

バイナリデータを2進数、10進数、16進数、半角文字、全角文字に変換して
出力したいと思い、色々ネットで調べたのですが処理のイメージが湧きません。

簡単で構いませんので、イメージをお教え願えませんでしょうか。
また、参考になるサイト等ご存知でしたらお教えください。

やりたいこととしては、
読み込むファイル

byte[]のバイト配列に変換

byte[]から、数バイト取り出して2進数、10進数、16進数、半角文字、全角文字に変換
です。

以上、よろしくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-02-12 11:59
2進・10進・16進の変換は情報処理の基本になりますが、
そもそもその変換のアルゴリズムがわからないのでしょうか?
それともbyte[]から数値として取得する方法がわからないのでしょうか。

半角・全角は文字列のエンコーディングがわからなければ変換はできません。
また全角と半角は1対1での関連性がありませんので、
独自で実装する必要があります。
byte[]を文字列にするにはStringクラスのメソッドで可能です。
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-02-12 12:45
byte[]から数値として取得する方法がわからないです。

以下のようなプログラムを組んだときに
public class BinarySample {
public static void main (String[] args) {
byte[] b = args[0].getBytes();
for (int i = 0; i < b.length; i++) {
System.out.println("result1="+b[i]);
}
}
}
引数に「10」を渡すと、結果として、
result1=49
result1=48
が出力されるのですが、
これは文字列「10」の文字コードが「4948」という意味ですよね?

このbyte配列から、一度2進数に落として、10進数で表示する。
という手順のイメージが湧かないのです。。

すいません、かつのりさんの質問に対する回答になってないかもしれないです。。
さたろう
会議室デビュー日: 2005/02/07
投稿数: 11
投稿日時: 2005-02-12 13:08
Stringを整数に直してから,それを2進数や16進数で表示させる方法でいいのでしょうか?
はまのっぷーさんがおっしゃっている
引用:

このbyte配列から、一度2進数に落として、10進数で表示する。


の意味がよくわからなかったです.
私が思うに,2進数や10進数というのは表示の方法であり,値としては同じものですので,一度2進数に・・・ というのはどうかな??と思いました.

とりあえず,
はまのっぷーさんは,2進数や16進数などで表示をしたいのだと解釈しまして,
ちょっと,コードを書いて見ましたので,載せておきます.
私の解釈違いでしたら,コメントください.再度検討してみます.

コード:
public class BinarySample { 
    public static void main (String[] args) {
        byte[] b = args[0].getBytes(); 
        for (int i = 0; i < b.length; i++) { 
            System.out.println("result1="+b[i]); 
        }
        
        int i;
        i = Integer.parseInt(args[0]);
        System.out.println("10進数:"+i);
        System.out.println("2進数:"+Integer.toBinaryString(i) );
        System.out.println("8進数:"+Integer.toOctalString(i) );
        System.out.println("16進数:"+Integer.toHexString(i) );
    } 
}

はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-02-12 13:52
ご回答ありがとうございます。

すいません。本質問の根本を説明していませんでした。
最終的には、
1.バイナリファイルを読み込み、byte[]配列にする。
2.byte[]配列を展開し、配列のXX番目からYY番目までを10進数で,16進数で,半角文字,全角文字で...という風にコンソール上に出力する。
ということをやりたいです。

ですので、必ずしもさたろうさんが教えてくださったような処理
-----------
i = Integer.parseInt(args[0]);
-----------
ができない、と思っています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-12 14:51
焦点を絞って質問をしたほうが良いですよ。
さたろうさんが例に挙げた args[0] から解析対象を拾う方法はあくまで例として挙げただけで n 進数の表現にパースする方法を示しているわけです。
パース対象の文字列をどのように渡すかは好きなようにプログラムすることができます。
・ファイルの読み込み
・byte[] 配列の変数への代入
・byte[]配列の展開?
・コンソールへの出力
などいろいろ項目があると思います。
何がわからないのかをよく整理して1項目ずつスレッドをたてて質問しましょう。
順序立ててプログラムを組み立てる考え方自体がわからないのであればまず教科書的な本、サイトを参考に勉強しましょう。
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-02-12 15:09
かつのりさん、さたろうさん、インギさん
ご回答ありがとうございました。
一度よく考えて改めて質問します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-12 15:32
ひとまず特定の数値をn進数で表現した文字列に変換する方法はわかりましたよね?
次に、試したことがなければ既存のバイナリエディタの類を動かしてみてイメージをつかんでみてはいかがでしょうか。
「ファイルを読み込んでn進数の表記に変換してコンソールに出力する」という高機能なAPIはありませんので、大まかに以下のように組み立てていく必要があります。
まとめて質問しても何がわからないのか、何がわかるのか検討がつきませんので、それぞれの段階でわからないことに焦点を絞り、都度調べてみて、あまりに検討がつかなければスレッドを立ててみるとよいと思います。
1)ファイルを読み込み、System.out.println()で画面に出力するプログラム
2)予め変数に定義してあるバイト配列をn進数でダンプするプログラム
1+2)ファイルを読み込み、バイト配列をn進数でダンプするプログラム
3)エンコーディングを指定して、予め変数に定義してあるバイト配列を全角か半角に振り分けるプログラム
1+2+3)合わせる
1

スキルアップ/キャリアアップ(JOB@IT)