前提・実現したいこと
学校の課題で言語はC#を利用し開発環境はVisual Studio 2017で任意の読み取ったファイルをバイナリで表示するものを作っていましたが変換の考え方がわからず、結局先生から模範解答を頂きましたが、ファイルを読み取るところまでは理解できますがそこからが理解できません。
ファイルを読み取ってからどのような処理をして、バイナリへと変化させるのでしょうか?
また何故変換したものが規則正しく並ぶのでしょうか?
詳しい方コードの解説ををお願いしたいです。
解説ですが、右も左もわからない状態ですので1から100まで5歳児に教えるように「ここで文字列を取得してここでこういった動作をするからこうなる」と言ったように面倒でしょうが最初から最後まで教えて頂けると幸いです。わからないところはコードにコメントで書いておきました。
今までのコメントは消しました。
先生の作った模範回答なら先生に聞きなさいとの事ですが、この模範解答は今、授業をしていただいてる先生と違う先生が作ったみたいで。詳しい事を聞きに言っても「私のコードじゃないと」逃げられてしまいます。実際に作った先生は誰かわかりません。
また、コード全部とは言わないので「ここからここはどういう意味なんですか?」と言った文法に関する限定的な質問も、現在この課題と違う課題がメインとなっているので、今すべきことをしてくださいと取り合ってくれず、友達も理解できていないので聞ける人がいないのが現状です。
ルール違反をしている場違いな質問かも知れませんが、どなたかお答えいただけると幸いです。
詳しいルールと致しまして。以下の内容となっております。
1、ボタンをクリックしたらファイル参照ダイアログを開いてファイルを選択させる。
2、バイナリー表示するファイル名を表示する。
3、ファイル名を表示した状態でボタンをクリックすると下の表に
左から1.バイトのインデックス 2.ファイル内容をバイナリー表示 3.ファイル内容を1バイトずつ表記する。(全角は文字化け)
と表示し1と2の上には1行0-15バイトまでを表すヘッダーをつけます。
4.ボタンを押したらアプリを終了する。
正常に完了すると以下のようにファイルを表示します。
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
00000000 30 31 32 33 34 35 36 37 38 39 0D 0A 82 A0 82 A2 0123456789......
00000010 82 A4 82 A6 82 A8 20 0D 0A 61 62 63 64 65 66 67 ...... ..abcdefg
00000020 68 69 6A 6B 0D 0A hijk..
選択したファイル内容は以下のとおりです。
0123456789
あいうえお
abcdefghijk
以上。質問が多いですがよろしくお願い致します。
*私自身のプログラミングレベルとしてC#歴は1週間程、CとPHPが一ヶ月程となっています。
該当のソースコード
C#
1コード 2 3using System; 4using System.Collections.Generic; 5using System.ComponentModel; 6using System.Data; 7using System.Drawing; 8using System.Linq; 9using System.Text; 10using System.Threading.Tasks; 11using System.Windows.Forms; 12using System.IO; 13 14namespace kadai2 15{ 16 public partial class Form1 : Form 17 { 18 19 public const int ST = 16; 20 21 public Form1() 22 { 23 InitializeComponent(); 24 } 25 26 private void FileSelect_Click(object sender, EventArgs e) 27 { 28 DialogResult dr = openFileDialog1.ShowDialog(); 29 if (dr == DialogResult.OK) 30 { 31 Fname.Text = openFileDialog1.FileName; 32 } 33 } 34 35 36 private void Display_Click(object sender, EventArgs e) 37 { 38 39 if(String.IsNullOrEmpty(Fname.Text)) 40 { 41 DialogResult dr = MessageBox.Show("ファイルが選択されていません。参照ボタンより、ファイルを選択してください。", 42 "メッセージ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 43 } else 44 { 45 46 DataBox.ResetText(); 47 48 49 header(); 50 51 52 binaryviewer(); 53 } 54 } 55 56 57 private void Close_Click(object sender, EventArgs e) 58 { 59 Close(); 60 } 61 62 private void DataBox_TextChanged(object sender, EventArgs e) 63 { 64 } 65 66 //ここからどいった動きをしているかわかりません。 67 //ここからどいった動きをしているかわかりません。 68 //ここからどいった動きをしているかわかりません。 69 70 private void header() 71 { 72 int i; 73 74 75 for (i = 0; i < 12; i++) 76 { 77 DataBox.Text += " "; 78 } 79 80 81 for (i = 0; i <= 15; i++) 82 { 83 DataBox.Text += string.Format("+{0:X} ", i); 84 if (i == 15) 85 { 86 DataBox.Text += " "; 87 } 88 } 89 90 91 for (i = 0; i <= 15; i++) 92 { 93 DataBox.Text += string.Format("{0:X}", i); 94 if (i == 15) 95 { 96 DataBox.Text += "\r\n"; 97 } 98 } 99 } 100 101 private void binaryviewer() 102 { 103 104 int x = 0; 105 int y = 0; 106 int z = 0; 107 int n; 108 109 FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open); 110 byte[] data = new byte[fs.Length]; 111 fs.Read(data, 0, data.Length); 112 string[] str = new string[fs.Length]; 113 fs.Close(); 114 115 116 while (y < data.Length) 117 { 118 119 DataBox.Text += string.Format("{0:X7}" + '0', x); 120 x++; 121 DataBox.Text += " "; 122 123 while (y < data.Length) 124 { 125 DataBox.Text += string.Format("{0:X2} ", data[y]); 126 y++; 127 128 if (y % ST == 0) 129 { 130 DataBox.Text += " "; 131 break; 132 } 133 } 134 135 136 if ((y == data.Length) && (y % ST != 0)) 137 { 138 for (n = y % ST; n <= ST; n++) 139 { 140 DataBox.Text += " "; 141 } 142 } 143 144 145 while (z < data.Length) 146 { 147 if (data[z] >= 0x20 && data[z] <= 0x7e) 148 { 149 DataBox.Text += (char)data[z]; 150 z++; 151 } 152 else 153 { 154 str[z] += "."; 155 DataBox.Text += str[z]; 156 z++; 157 } 158 159 if (z % ST == 0) 160 { 161 DataBox.Text += "\r\n"; 162 break; 163 } 164 } 165 } 166 } 167 168 private void Form1_Load(object sender, EventArgs e) 169 { 170 171 } 172 } 173}
回答4件
あなたの回答
tips
プレビュー