- ベストアンサー
(再質問)VC#でテキストボックスに入力した文字列をビット列に変換
No.1017874で質問して回答頂いたのですが、うまくいきませんでした。質問の仕方が悪かったのかもしれません。締切ってしまったので再質問します。 テキストボックスに入力した文字列を2進数の文字列(0と1)に変換したいのですが、下記のプログラムでは、2や8が含まれます。 例えば、"シ"はシフトJISでは16進数で8356なので、1000001101010110となってほしいのですが、下記プログラムでは128000001281280128012801281280となりました。 sb.Append(b & 0x80)の部分で(b & 0x80)が2進数10000000(10進数で128)の場合に10進数にしてsbに加えるためだと思いますが、 最上位ビット(この場合は1)だけを加えていくと、ほしい結果が得られそうです。 その方法を教えて下さい。 private void button2_Click(object sender, System.EventArgs e) { int i,j; Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); string str = textBox1.Text; byte[] bytes = sjisEnc.GetBytes(str); StringBuilder sb = new StringBuilder(); for (i = 0; i < bytes.Length; i++) { byte b = bytes[i]; for (j = 0; j < 8; j++) { sb.Append(b & 0x80); b <<= 1; } } String binaryString = sb.ToString(); textBox1.Text = binaryString ; } 参考ページ(文字列をシフトJISとしてバイト列に変換するには?) http://www.atmarkit.co.jp/fdotnet/dotnettips/010str2byte/str2byte.html
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
class foo { public static void Main() { System.Text.Encoding sjisEnc = System.Text.Encoding.GetEncoding("Shift_JIS"); string str = "シ"; byte[] bytes = sjisEnc.GetBytes(str); System.Text.StringBuilder sb = new System.Text.StringBuilder(); for ( int i = 0; i < bytes.Length; i++) { byte b = bytes[i]; for ( int j = 0; j < 8; j++) { sb.Append((b & 0x80) != 0 ? '1':'0'); b <<= 1; } } string binaryString = sb.ToString(); System.Console.WriteLine(binaryString); } }
お礼
うまくいきました。ありがとうございました。