wp7用のアプリの開発を始めたばかりで、c#を使用してバイナリの文字列をASCIIに変換しようとしています。
しかし、どうすればそれができるのかわかりません。誰かがここで私を助けてくれることを願っています。
例 :
入力文字列:0110100001100101011011000110110001101111
出力文字列:hello
wp7用のアプリの開発を始めたばかりで、c#を使用してバイナリの文字列をASCIIに変換しようとしています。
しかし、どうすればそれができるのかわかりません。誰かがここで私を助けてくれることを願っています。
例 :
入力文字列:0110100001100101011011000110110001101111
出力文字列:hello
SubStringを使用し、Convert.ToByteに組み込まれている場合は、次のようになります。
string input = "0110100001100101011011000110110001101111";
int charCount = input.Length / 8;
var bytes = from idx in Enumerable.Range(0, charCount)
let str = input.Substring(idx*8,8)
select Convert.ToByte(str,2);
string result = Encoding.ASCII.GetString(bytes.ToArray());
Console.WriteLine(result);
フレームワークのどのメソッドが計算を実行するかではなく、計算がどのように実行されるかを知りたい場合に備えて、これを追加しました。
string input = "0110100001100101011011000110110001101111";
var chars = input.Select((ch,idx) => new { ch, idx});
var parts = from x in chars
group x by x.idx / 8 into g
select g.Select(x => x.ch).ToArray();
var bytes = parts.Select(BitCharsToByte).ToArray();
Console.WriteLine(Encoding.ASCII.GetString(bytes));
BitCharsToByteがchar[]から対応するバイトへの変換を行う場所:
byte BitCharsToByte(char[] bits)
{
int result = 0;
int m = 1;
for(int i = bits.Length - 1 ; i >= 0 ; i--)
{
result += m * (bits[i] - '0');
m*=2;
}
return (byte)result;
}
上記の両方のソリューションは、基本的に同じことを行います。最初に、文字を8つのグループにグループ化します。次に、そのサブ文字列を取得し、表現されたビットを取得して、バイト値を計算します。次に、ASCIIエンコーディングを使用して、これらのバイトを文字列に変換します。
BitArray
クラスとそのCopyTo
関数を使用して、urビット文字列をバイト配列にコピーできます。
次に、を使用してバイト配列を文字列に変換できますText.Encoding.UTF8.GetString(Byte[])
MSDNのBitArrayでこのリンクを参照してください