2

誰かがこれをしたいと思う理由を無視してください....:)

いくつかのバイトを取得し、それらを文字列に変換してから、後で同じバイト配列に戻すことができるようにしたいと思います。同じ長さとすべて。

ASCIIEncoderクラス(テキストファイルでのみ機能)とUnicode Encoderクラス(これまでのところ、1024 * nの大きさの配列でのみ機能します。これは各文字の長さが等しいためだと思います)を使用してみましたが、成功しませんでした。

これを行う簡単な方法はありますか?私はおそらくそうするために私自身の関数を書くべきだと思いますね?

4

4 に答える 4

5

Base64 エンコーディングを使用します。ただし、スペース効率は良くありません。

string s = Convert.ToBase64String(byteArray);
byte[] decoded = Convert.FromBase64String(s);
于 2009-12-31T21:54:05.867 に答える
2

Base64は、このような問題に優れています。

string str = Convert.ToBase64String(inArray);
...
byte[] ourArray = Convert.FromBase64String(str);

結果の文字列は、元の配列よりも (もちろん) 大きくなることに注意してください。

于 2009-12-31T21:53:49.923 に答える
1

各 8 ビット バイトを 16 ビット char に格納するために必要なスペースが 2 倍になることを気にせず、文字列を印刷可能な文字で構成する必要がない場合は、次の直接的な方法で行うことができます。

string BytesToString(byte[] b)
{
    StringBuilder  s;    

    s = new StringBuilder(b.Length);
    for (int i = 0;  i < b.Length;  i++)
        s[i] = (char) b[i];    // Cast not really needed
    return s.ToString();
}    

byte[] StringToBytes(string s)
{
    byte[]  b;    

    b = new byte[s.Length];
    for (int i = 0;  i < b.Length;  i++)
        b[i] = (byte) s[i];
    return b;
}

2 つの 8 ビット バイトを各 16 ビット Unicode char にパックするためのより精巧なコードを作成することもできますが、その場合、バイト配列の長さが奇数になるという特殊なケースを処理する必要があります (これは、最後に追加のセンチネル バイトを使用して行うことができます)。キャラクター)。

于 2009-12-31T22:38:52.783 に答える
1

文字列のエンコーディングがわかっている場合(UTF8だと思います)、エンコーディングクラスを使用するだけです:

Encoding.UTF8.GetBytes
Encoding.UTF8.GetString

エンコーディング クラスは、System.Text 名前空間にあります。

Y.

于 2009-12-31T22:00:03.133 に答える