none
16進数について RRS feed

  • 質問

  • はじめましてtaiyakiです。

    初心者なのでよろしくお願いします。

     

    ファイルをバイナリエディタのように16進数で読み込むにはどうすればいいのですか?

    ばかげた質問と思われるかもしれませんが、よろしくお願いします。

    2008年5月12日 3:44

回答

  • ファイルのデータを16進数表現で表示するということでよろしいですか。


    FileStream クラス

    http://msdn.microsoft.com/ja-jp/library/system.io.filestream(VS.85).aspx

    BinaryReader.ReadByte

    http://msdn.microsoft.com/ja-jp/library/system.io.binaryreader.readbyte(VS.85).aspx

    String..::.Format メソッド (String, Object)
    http://msdn.microsoft.com/ja-jp/library/fht0f5be.aspx

    複合書式設定

    http://msdn.microsoft.com/ja-jp/library/txafckwd.aspx

    標準の数値書式指定文字列

    http://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx

     

    を参考にすればできると思います。

     

     

    2008年5月12日 4:59
  • 外池と申します。

     

    「具体的に教える」というのはどうすればよいのでしょう? プログラムを示して欲しいのでしょうか? しかし・・・、プログラムを読んで理解できますか? IIJIMASさんがご紹介になったサイトをご覧になってよくわからない、ということだと、プログラムそのものを示しても中身がほとんどチンプンカンプンになると思います。

     

    私が提案できる方針は次のようなものです。まずは、TextBoxは忘れて、コンソールアプリをお奨めします。

     

    コンソールアプリで、FileStreamを使ってファイル"C:\a.txt"を開きます。

    このFileStreamでファイルのデータをバイナリーデータとしてByte型配列に読み込みます。(たぶん、一気に読み込んで良いかと)

    で、まずは16進数ではなく、単純な整数型(0~255)で、コンソールに吐き出してみてください。書式は考えずに。

     

    次は、Byte型配列を吐き出すフォーマットを16進数にしてみてください。これは、StringクラスのFormatメソッドでできます。

     

    さらに、1バイトの表示を16進数を二桁+空白1個にそろえて、1行16バイト出力したら改行し・・・、というように、綺麗に並べて表示するように修正します。

     

    これだけのものが書ければ、あとはTextBoxに出力するプログラムもすぐに出来ます。ご自分で調べて書く努力をしてください。

     

     

    2008年5月13日 5:09
  • 一気に読み込むのであれば、.NET Framework 2.0以降ですとFile.ReadAllBytesメソッドも使えます。

     

    2008年5月13日 5:22
    モデレータ
  • えー、具体的には次の様に書けば良いはずです。

     Dim binTb As Byte()
     binTb = My.Computer.FileSystem.ReadAllBytes("ファイルパス") '(a)
     Label1.Text = "(" & binTb(0).ToString & ")"         '(b)
     Label1.Text = System.Convert.ToString(binTb(0), 16) '(c)

    (a)はバイナリーとして読み込み、(b)で1バイト分が表示されます。

    しかし(b)では、0~255の数字になるので、16進表示する場合は、(c)で。

    これでも、改行コードなどは1桁になってしまいますので、必ず2桁にするなら、

    1桁のとき、頭に半角”0”を付けるなど工夫は必要です。

    2008年5月15日 5:49

すべての返信

  • ファイルのデータを16進数表現で表示するということでよろしいですか。


    FileStream クラス

    http://msdn.microsoft.com/ja-jp/library/system.io.filestream(VS.85).aspx

    BinaryReader.ReadByte

    http://msdn.microsoft.com/ja-jp/library/system.io.binaryreader.readbyte(VS.85).aspx

    String..::.Format メソッド (String, Object)
    http://msdn.microsoft.com/ja-jp/library/fht0f5be.aspx

    複合書式設定

    http://msdn.microsoft.com/ja-jp/library/txafckwd.aspx

    標準の数値書式指定文字列

    http://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx

     

    を参考にすればできると思います。

     

     

    2008年5月12日 4:59
  • すみません。サイトは閲覧させていただいたのですが、よく内容がわかりませんでした。
    もうしわけないのですが、具体的に教えていただけないでしょうか?

    たとえば、"C:\a.txt"というファイルがあったとして、それを16進数でTextBoxに表示するには
    どうすればいいのですか?

    2008年5月13日 4:36
  • 外池と申します。

     

    「具体的に教える」というのはどうすればよいのでしょう? プログラムを示して欲しいのでしょうか? しかし・・・、プログラムを読んで理解できますか? IIJIMASさんがご紹介になったサイトをご覧になってよくわからない、ということだと、プログラムそのものを示しても中身がほとんどチンプンカンプンになると思います。

     

    私が提案できる方針は次のようなものです。まずは、TextBoxは忘れて、コンソールアプリをお奨めします。

     

    コンソールアプリで、FileStreamを使ってファイル"C:\a.txt"を開きます。

    このFileStreamでファイルのデータをバイナリーデータとしてByte型配列に読み込みます。(たぶん、一気に読み込んで良いかと)

    で、まずは16進数ではなく、単純な整数型(0~255)で、コンソールに吐き出してみてください。書式は考えずに。

     

    次は、Byte型配列を吐き出すフォーマットを16進数にしてみてください。これは、StringクラスのFormatメソッドでできます。

     

    さらに、1バイトの表示を16進数を二桁+空白1個にそろえて、1行16バイト出力したら改行し・・・、というように、綺麗に並べて表示するように修正します。

     

    これだけのものが書ければ、あとはTextBoxに出力するプログラムもすぐに出来ます。ご自分で調べて書く努力をしてください。

     

     

    2008年5月13日 5:09
  • 一気に読み込むのであれば、.NET Framework 2.0以降ですとFile.ReadAllBytesメソッドも使えます。

     

    2008年5月13日 5:22
    モデレータ
  • えー、具体的には次の様に書けば良いはずです。

     Dim binTb As Byte()
     binTb = My.Computer.FileSystem.ReadAllBytes("ファイルパス") '(a)
     Label1.Text = "(" & binTb(0).ToString & ")"         '(b)
     Label1.Text = System.Convert.ToString(binTb(0), 16) '(c)

    (a)はバイナリーとして読み込み、(b)で1バイト分が表示されます。

    しかし(b)では、0~255の数字になるので、16進表示する場合は、(c)で。

    これでも、改行コードなどは1桁になってしまいますので、必ず2桁にするなら、

    1桁のとき、頭に半角”0”を付けるなど工夫は必要です。

    2008年5月15日 5:49
  • 葉流奈津さんありがとうございます!
    やってみたらできました。
    意外と数行でできるんですね!
    もっと複雑かと思ってました。

    他の皆さんも親切に教えてくださってありがとうございました。


    2008年5月18日 0:44
  • こんにちは!フォーラムオペレータの栗原麻里です

     

    IIJIMAS さん、外池 さん、trapemiya さん、葉流奈津 さん、回答ありがとうございます。

     

    taiyaki さん、フォーラムのご利用ありがとうございます。

    回答が参考になったようですので、回答者の皆様の回答に回答済みチェックをつけさせていただきました。

     

    回答済みチェックがつくことによって、フォーラムをご利用の皆様も有用な情報が見つけやすくなります。

    回答がお役に立ちましたら、回答済みボタンを押してチェックをつけてくださいね!

     

    taiyaki さんはチェックを解除することもできますので、ご確認ください。

     

    それでは、ぜひまたフォーラムをご活用下さい!

    2008年5月23日 6:59