質問編集履歴

3

情報追加

2018/09/03 08:27

投稿

widget11
widget11

スコア221

test CHANGED
File without changes
test CHANGED
@@ -184,6 +184,8 @@
184
184
 
185
185
  var tableIndex = Convert.ToInt32(bit6, 2);
186
186
 
187
+ //ここでインデックスが配列の境界外ですとエラーが出ます
188
+
187
189
  sb.Append(conversionTable[tableIndex]);
188
190
 
189
191
  }

2

情報の追加

2018/09/03 08:27

投稿

widget11
widget11

スコア221

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,48 @@
36
36
 
37
37
 
38
38
 
39
+ using System;
40
+
41
+ using System.Collections.Generic;
42
+
43
+ using System.Linq;
44
+
45
+ using System.Text;
46
+
47
+
48
+
49
+ namespace Base64
50
+
51
+ {
52
+
53
+ class Program
54
+
55
+ {
56
+
57
+ public static char[] conversionTable = new char[]
58
+
59
+ {
60
+
61
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
62
+
63
+ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
64
+
65
+ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
66
+
67
+ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
68
+
69
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
70
+
71
+ 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
72
+
73
+ '8', '9', '+', '/',
74
+
75
+ };
76
+
77
+
78
+
79
+
80
+
39
81
 
40
82
 
41
83
 
@@ -138,9 +180,9 @@
138
180
 
139
181
 
140
182
 
183
+
184
+
141
-           var tableIndex = Convert.ToInt32(bit6, 2);
185
+ var tableIndex = Convert.ToInt32(bit6, 2);
142
-
143
-             //ここでインデックスが配列の境界外ですとエラー
144
186
 
145
187
  sb.Append(conversionTable[tableIndex]);
146
188
 
@@ -166,7 +208,9 @@
166
208
 
167
209
 
168
210
 
169
-
211
+
212
+
213
+
170
214
 
171
215
  }
172
216
 

1

追加編集為

2018/09/03 08:26

投稿

widget11
widget11

スコア221

test CHANGED
File without changes
test CHANGED
@@ -25,3 +25,151 @@
25
25
  char[] bits変数の中身でLINQのselectmanyやラムダを使わない方法を知りたいです。
26
26
 
27
27
  宜しくお願い致します。
28
+
29
+
30
+
31
+ 追記___
32
+
33
+
34
+
35
+ ```ここに言語を入力
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+ static void Main(string[] args)
44
+
45
+ {
46
+
47
+ Console.WriteLine("文字を入力してください");
48
+
49
+ string text = Console.ReadLine();
50
+
51
+ Encoding encoding = new UTF8Encoding();
52
+
53
+ string aaa = Encode(text, encoding);
54
+
55
+ Console.WriteLine($"{aaa}");
56
+
57
+ Console.ReadKey();
58
+
59
+
60
+
61
+ }
62
+
63
+
64
+
65
+ public static string Encode(string text, Encoding encoding)
66
+
67
+ {
68
+
69
+ //stringビルダー型の変数を初期化
70
+
71
+ StringBuilder sb = new StringBuilder();
72
+
73
+
74
+
75
+ // 変更したい文字列を2進数に変換する
76
+
77
+ byte[] bytes = encoding.GetBytes(text);
78
+
79
+
80
+
81
+ //LINQを使わず文字列に展開
82
+
83
+ var list = new List<string>();
84
+
85
+ foreach (var octet in bytes)
86
+
87
+ {
88
+
89
+ list.Add(Convert.ToString(octet, 2).PadLeft(8, '0'));
90
+
91
+ }
92
+
93
+
94
+
95
+ var bits = list.ToArray();
96
+
97
+ var bit6 = "";
98
+
99
+ for (int i = 0; i < bits.Length; i++)
100
+
101
+ {
102
+
103
+
104
+
105
+ bit6 += bits[i];
106
+
107
+
108
+
109
+ //6ビット文字列を対応表で変換
110
+
111
+ if (bit6.Length == 6)
112
+
113
+ {
114
+
115
+
116
+
117
+ int tableIndex = Convert.ToInt32(bit6, 2);
118
+
119
+ sb.Append(conversionTable[tableIndex]);
120
+
121
+
122
+
123
+ bit6 = string.Empty;
124
+
125
+ }
126
+
127
+
128
+
129
+
130
+
131
+ if (i == bits.Length - 1 && bit6.Length != 0)
132
+
133
+ {
134
+
135
+ var padCount = 6 - bit6.Length;
136
+
137
+ for (int j = 0; j < padCount; j++) bit6 += "0";
138
+
139
+
140
+
141
+           var tableIndex = Convert.ToInt32(bit6, 2);
142
+
143
+             //ここでインデックスが配列の境界外ですとエラー
144
+
145
+ sb.Append(conversionTable[tableIndex]);
146
+
147
+ }
148
+
149
+ }
150
+
151
+
152
+
153
+
154
+
155
+ while (sb.Length % 4 != 0) sb.Append("=");
156
+
157
+
158
+
159
+ return sb.ToString();
160
+
161
+
162
+
163
+
164
+
165
+ }
166
+
167
+
168
+
169
+
170
+
171
+ }
172
+
173
+ }
174
+
175
+ ```