2

wp7用のアプリの開発を始めたばかりで、c#を使用してバイナリの文字列をASCIIに変換しようとしています。

しかし、どうすればそれができるのかわかりません。誰かがここで私を助けてくれることを願っています。

例 :

入力文字列:0110100001100101011011000110110001101111

出力文字列:hello

4

2 に答える 2

3

簡単な解決策、

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がcha​​r[]から対応するバイトへの変換を行う場所:

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エンコーディングを使用して、これらのバイトを文字列に変換します。

于 2012-07-01T08:56:43.577 に答える
0

BitArrayクラスとそのCopyTo関数を使用して、urビット文字列をバイト配列にコピーできます。

次に、を使用してバイト配列を文字列に変換できますText.Encoding.UTF8.GetString(Byte[])

MSDNのBitArrayでこのリンクを参照してください

于 2012-07-01T09:03:11.713 に答える