C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: exeファイルを16進でリッチテキストboxに表示するには


(過去ログ 33 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■16443 / inTopicNo.1)  exeファイルを16進でリッチテキストboxに表示するには
  
□投稿者/ mari (6回)-(2008/04/06(Sun) 08:44:29)

分類:[.NET 全般] 

このようにコードを書くとメッセージボックスにアドレス00000000〜000000A8までしかバイト列表示されません・・・
テキストボックスでもアドレス00000000〜000000A8までしかバイト列表示されません・・・
リッチテキストボックスに表示させようとするとエラーウィンドウが出で表示できません・・・
なぜですか?おしえてください。

private void button5_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream(@"読み込みたいexeファイル",FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (TextReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis")))
{
string str = sr.ReadLine();
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
byte[] bytes = sjisEnc.GetBytes(str);

MessageBox.Show(BitConverter.ToString(bytes));//テキストボックスに表示の場合textBox1.Text = (BitConverter.ToString(bytes));
}
}

}
引用返信 編集キー/
■16444 / inTopicNo.2)  Re[1]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (7回)-(2008/04/06(Sun) 09:05:13)
No16443 (mari さん) に返信
> このようにコードを書くとメッセージボックスにアドレス00000000〜000000A8までしかバイト列表示されません・・・
> テキストボックスでもアドレス00000000〜000000A8までしかバイト列表示されません・・・
> リッチテキストボックスに表示させようとするとエラーウィンドウが出で表示できません・・・
> なぜですか?おしえてください。
>
> private void button5_Click(object sender, EventArgs e)
> {
> using (FileStream fs = new FileStream(@"読み込みたいexeファイル",FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
> {
> using (TextReader sr = new StreamReader(fs, Encoding.GetEncoding("shift-jis")))
> {
> string str = sr.ReadLine();
> Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
> byte[] bytes = sjisEnc.GetBytes(str);
>
> MessageBox.Show(BitConverter.ToString(bytes));//テキストボックスに表示の場合textBox1.Text = (BitConverter.ToString(bytes));
> }
> }
>
> }

リッチテキストボックスrichTextBox1.LoadFile(BitConverter.ToString(bytes));からrichTextBox1.Text = (BitConverter.ToString(bytes));に変えたら表示できました
でもアドレス00000000〜000000A8までしかバイト列表示されません・・・

引用返信 編集キー/
■16445 / inTopicNo.3)  Re[2]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ Azulean (57回)-(2008/04/06(Sun) 09:16:54)
バイナリファイルの読み込みにTextReaderを使わないで下さい。
どのように動くが把握しにくくなります。
恐らく、ReadLineが読み込みを止める基準となるバイト列がA8付近にあるのでしょう。

TextReader=テキストファイルを読み込む
ReadLine=1行(次の改行まで)を読み込む
exeファイル=文字として表せないバイトを多く含む、バイナリファイル

> リッチテキストボックスrichTextBox1.LoadFile(BitConverter.ToString(bytes));
この考え、危ないですよ。
LoadFileメソッドは何をするものですか?引数に何を渡すものですか?
初めて使うものはヘルプ、あるいはMSDNで確認しておくと良いと思います。


参考
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.richtextbox_members.aspx
http://msdn2.microsoft.com/ja-jp/library/336wast5.aspx

引用返信 編集キー/
■16446 / inTopicNo.4)  Re[2]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ επιστημη (916回)-(2008/04/06(Sun) 09:16:58)
επιστημη さんの Web サイト
2008/04/06(Sun) 09:18:29 編集(投稿者)

- exeファイルをShiftJiSのテキストとして読むこと
- (ファイル末端まででなく)最初に見つかった改行まで読むこと

にどんな意味があるのでしょうか?

# カブった... orz
引用返信 編集キー/
■16447 / inTopicNo.5)  Re[3]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (8回)-(2008/04/06(Sun) 10:56:00)
No16445 (Azulean さん) に返信
> バイナリファイルの読み込みにTextReaderを使わないで下さい。
> どのように動くが把握しにくくなります。
> 恐らく、ReadLineが読み込みを止める基準となるバイト列がA8付近にあるのでしょう。
>
> TextReader=テキストファイルを読み込む
> ReadLine=1行(次の改行まで)を読み込む
> exeファイル=文字として表せないバイトを多く含む、バイナリファイル
>
>>リッチテキストボックスrichTextBox1.LoadFile(BitConverter.ToString(bytes));
> この考え、危ないですよ。
> LoadFileメソッドは何をするものですか?引数に何を渡すものですか?
> 初めて使うものはヘルプ、あるいはMSDNで確認しておくと良いと思います。
>
>
> 参考
> http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.richtextbox_members.aspx
> http://msdn2.microsoft.com/ja-jp/library/336wast5.aspx
>

コードを書き換えましたそしたら全部表示されました
でもなんか変・・・フリーのバイナリエディタでは90とC0が自分のは両方とも3Fになってる・・・あとはほとんど同じだったなんでだろう・・・

private void button5_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream(@"読み込みたいexeファイル", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs))
{
string str = sr.ReadToEnd();
Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
byte[] bytes = sjisEnc.GetBytes(str);

richTextBox1.Text = (BitConverter.ToString(bytes));
}
}
}
引用返信 編集キー/
■16448 / inTopicNo.6)  Re[4]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ επιστημη (917回)-(2008/04/06(Sun) 11:14:43)
επιστημη さんの Web サイト
>     string str = sr.ReadToEnd();
> Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
> byte[] bytes = sjisEnc.GetBytes(str);

得られたバイト列をShift_JISに変換するのには何か意味があるんですか?

↓なんの変換もかけなければ、ちゃんと "C0-90" と書いてくれますが。
using System;

class Program {
  public static void Main() {
    byte[] bytes = { 0xC0, 0x90 };
    Console.WriteLine(BitConverter.ToString(bytes));
  }
}

引用返信 編集キー/
■16449 / inTopicNo.7)  Re[5]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ Azulean (58回)-(2008/04/06(Sun) 11:35:01)
> 得られたバイト列をShift_JISに変換するのには何か意味があるんですか?
想像するにbyte配列が得るために使用されているのではないかと。

byte配列が欲しいのであれば、StreamReaderを使う時点で誤りかと思います。
(StreamReaderはデフォルトではUnicode(UTF-8)の文字列を扱うものです)
http://msdn2.microsoft.com/ja-jp/library/system.io.streamreader.aspx

#認識できない文字が"?"(3F)への置換の対象となるはず?
引用返信 編集キー/
■16450 / inTopicNo.8)  Re[6]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (9回)-(2008/04/06(Sun) 12:45:35)
No16449 (Azulean さん) に返信
>>得られたバイト列をShift_JISに変換するのには何か意味があるんですか?
> 想像するにbyte配列が得るために使用されているのではないかと。
>
> byte配列が欲しいのであれば、StreamReaderを使う時点で誤りかと思います。
> (StreamReaderはデフォルトではUnicode(UTF-8)の文字列を扱うものです)
> http://msdn2.microsoft.com/ja-jp/library/system.io.streamreader.aspx
>
> #認識できない文字が"?"(3F)への置換の対象となるはず?

コード書き換えましたでもReadToEnd()がこんどはつかえないとエラーでます・・・

private void button5_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream(@"読み込みたいexeファイル", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (BufferedStream sr = new BufferedStream(fs))
{
byte[] byteArray = sr.ReadToEnd();//対応したすべてを読み込むメソッドがみあたらない・・・

richTextBox1.Text = (BitConverter.ToString(byteArray));//for (int i = 0; i < byteArray.Length; i++) {Console.Write("{0:X2} ", byteArray[i]);}←これはなぜかエラー

}
}
}
引用返信 編集キー/
■16451 / inTopicNo.9)  Re[7]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ επιστημη (918回)-(2008/04/06(Sun) 13:27:28)
επιστημη さんの Web サイト
// readbinary.cs --- オノレ自身をバイナリダンプ
using System;
using System.IO;

class Program {
  public static void Main() {
    using (FileStream fs = new FileStream(@"readbinary.exe", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
      using (BufferedStream sr = new BufferedStream(fs)) {
        const int buffersize = 16; // こんだけずつ読む
        byte[] buffer = new byte[buffersize];
        int readlength;
        do {
          readlength = sr.Read(buffer,0,buffersize);
          Console.WriteLine(BitConverter.ToString(buffer));
        } while ( readlength == buffersize );
      }
    }
  }
}

引用返信 編集キー/
■16454 / inTopicNo.10)  Re[7]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ Azulean (59回)-(2008/04/06(Sun) 15:00:43)
> コード書き換えましたでもReadToEnd()がこんどはつかえないとエラーでます・・・
ReadToEndは全てのクラスで使える訳じゃないですよ。
ヘルプ(やMSDN)くらい読んで下さい。

http://msdn2.microsoft.com/ja-jp/library/system.io.streamreader_members.aspx
http://msdn2.microsoft.com/ja-jp/library/system.io.bufferedstream_members.aspx


#ReadToEndメソッドの存在は本質から遠ざけるだけのような気がするなぁ
引用返信 編集キー/
■16456 / inTopicNo.11)  Re[7]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ 渋木宏明(ひどり) (690回)-(2008/04/06(Sun) 15:25:33)
渋木宏明(ひどり) さんの Web サイト
バイナリファイルの中身を byte 型配列として一括で取得したいなら、File.ReadAllBytes() でどーぞ。
引用返信 編集キー/
■16460 / inTopicNo.12)  Re[8]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (10回)-(2008/04/06(Sun) 16:55:03)
No16451 (επιστημη さん) に返信
> // readbinary.cs --- オノレ自身をバイナリダンプ
> using System;
> using System.IO;
>
> class Program {
> public static void Main() {
> using (FileStream fs = new FileStream(@"readbinary.exe", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
> using (BufferedStream sr = new BufferedStream(fs)) {
> const int buffersize = 16; // こんだけずつ読む
> byte[] buffer = new byte[buffersize];
> int readlength;
> do {
> readlength = sr.Read(buffer,0,buffersize);
> Console.WriteLine(BitConverter.ToString(buffer));
> } while ( readlength == buffersize );
> }
> }
> }
> }
>

おしえてくれてありがとうございます
16バイト指定のところを50000バイト指定にして全部表示させることができました。

>バイナリファイルの中身を byte 型配列として一括で取得したいなら、File.ReadAllBytes() でどーぞ。
つかいかたわかんないので調べてつかえるようにします。


解決済み
引用返信 編集キー/
■16484 / inTopicNo.13)  Re[9]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ 倉田 有大 (180回)-(2008/04/07(Mon) 01:23:47)
No16460 (mari さん) に返信
> ■No16451 (επιστημη さん) に返信
>>// readbinary.cs --- オノレ自身をバイナリダンプ
>>using System;
>>using System.IO;
>>
>>class Program {
>> public static void Main() {
>> using (FileStream fs = new FileStream(@"readbinary.exe", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
>> using (BufferedStream sr = new BufferedStream(fs)) {
>> const int buffersize = 16; // こんだけずつ読む
>> byte[] buffer = new byte[buffersize];
>> int readlength;
>> do {
>> readlength = sr.Read(buffer,0,buffersize);
>> Console.WriteLine(BitConverter.ToString(buffer));
>> } while ( readlength == buffersize );
>> }
>> }
>> }
>>}
>>
>
> おしえてくれてありがとうございます
> 16バイト指定のところを50000バイト指定にして全部表示させることができました。

?
16のままででませんでした?
do whileでまわしてるから、なんぼでもいいようにみえるのですが
引用返信 編集キー/
■16491 / inTopicNo.14)  Re[8]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ επιστημη (920回)-(2008/04/07(Mon) 09:39:20)
επιστημη さんの Web サイト
2008/04/07(Mon) 09:40:35 編集(投稿者)
> バイナリファイルの中身を byte 型配列として一括で取得したいなら、File.ReadAllBytes() でどーぞ。

はぁい。

// --- readbinary.cs
class Program {
  public static void Main() {
    System.Console.WriteLine(System.BitConverter.ToString(System.IO.File.ReadAllBytes("readbinary.exe")));
  }
}

解決済み
引用返信 編集キー/
■16532 / inTopicNo.15)  Re[10]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (11回)-(2008/04/07(Mon) 20:53:10)
No16484 (倉田 有大 さん) に返信
> ■No16460 (mari さん) に返信
>>■No16451 (επιστημη さん) に返信
> >>// readbinary.cs --- オノレ自身をバイナリダンプ
> >>using System;
> >>using System.IO;
> >>
> >>class Program {
> >> public static void Main() {
> >> using (FileStream fs = new FileStream(@"readbinary.exe", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
> >> using (BufferedStream sr = new BufferedStream(fs)) {
> >> const int buffersize = 16; // こんだけずつ読む
> >> byte[] buffer = new byte[buffersize];
> >> int readlength;
> >> do {
> >> readlength = sr.Read(buffer,0,buffersize);
> >> Console.WriteLine(BitConverter.ToString(buffer));
> >> } while ( readlength == buffersize );
> >> }
> >> }
> >> }
> >>}
> >>
>>
>>おしえてくれてありがとうございます
>>16バイト指定のところを50000バイト指定にして全部表示させることができました。
>
> ?
> 16のままででませんでした?
> do whileでまわしてるから、なんぼでもいいようにみえるのですが

もう1回16バイト指定してみました。最初の16バイト分が表示されたあと最後の16バイト分が表示されてました。
16バイト分ずつ表示され改行されるのかとおもってました。
解決済み
引用返信 編集キー/
■16533 / inTopicNo.16)  Re[9]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ mari (12回)-(2008/04/07(Mon) 20:56:30)
No16491 (επιστημη さん) に返信
> 2008/04/07(Mon) 09:40:35 編集(投稿者)
>
> > バイナリファイルの中身を byte 型配列として一括で取得したいなら、File.ReadAllBytes() でどーぞ。
>
> はぁい。
>
> // --- readbinary.cs
> class Program {
> public static void Main() {
> System.Console.WriteLine(System.BitConverter.ToString(System.IO.File.ReadAllBytes("readbinary.exe")));
> }
> }

たったの1行なんですね;
ありがとうございます。
解決済み
引用返信 編集キー/
■16565 / inTopicNo.17)  Re[11]: exeファイルを16進でリッチテキストboxに表示するには
□投稿者/ επιστημη (921回)-(2008/04/08(Tue) 09:41:25)
επιστημη さんの Web サイト
> もう1回16バイト指定してみました。最初の16バイト分が表示されたあと最後の16バイト分が表示されてました。
> 16バイト分ずつ表示され改行されるのかとおもってました。

StringBuilderかなにかに溜め込まなきゃダメよー

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -