1

次のように、テキスト ボックスに次のビット シーケンスを書きたいと思います。

000101100000000100000001000000010000000000100111001100010010000000110000001011100011000000110000001100000011000000100000001100110011100100101110001101110011010100100000001100000010111000110000001110000010000000110000001011100011000000110000001000000011000000101110001100000011000000110000001100000000010111010111

しかし、8ビットごとに1バイトに相当するので、byte[]配列に格納したいと思います。もちろん、次のように読むと:

byte[] byteBuffer = Encoding.ASCII.GetBytes(messageTextBox.Text);

それぞれ0または1はバイト全体に変わりますが、これは私が望むものではありません。

既存の方法のような簡単な解決策はありますか、それとも独自に開発する必要がありますか?

4

2 に答える 2

1

Convert.ToByte()次のようなものを使用して実行できます。

string str = messageTextBox.Text;
byte[] byteBuffer = Enumerable.Range(0, str / 8).
                        Select(pos => Convert.ToByte(
                        str.Substring(pos * 8, 8),
                        2)).ToArray();
于 2012-12-30T12:26:15.827 に答える
1

私はコンパイラなしで外出先で次のコードを書いたので、構文エラーをお詫び申し上げます。また、テキスト文字列の最後に到達するように注意する必要があります。これは含まれていません。以下の方法はあなたがやりたいことをすると思います..

private bytes[] extractBytes (string text) {

    byte[] bytes = new byte[100];
    int i = 0;
    int j = 0;
    string currentByte = "";

    while (i <= text.Length) {

         currentByte += text.Substring(i, 1);

         i++;

         if (i % 8 == 0) {

             j++;

             bytes[j] = convertToDecimal(currentByte);
             currentByte = "";
         }
    )

    return bytes;
}

文字列から抽出したバイナリ値で表される 10 進数値を保存する場合は、次の変換方​​法を使用できます。

private byte convertToDecimal (string binary) {

    int i = 0;
    int byte = 0;

    while (i < s.Length) {

        if (s.Substring(s.Length - 1 - i, 1).Equals("1")) {

            sum += (byte)Math.Pow(2, i);
        }

        i++;
    }

    return sum;
}
于 2012-12-30T12:26:42.223 に答える