98

まったく同じバイト配列が返される限り、エンコーディングなどはあまり気にしません。

要約すると、バイト配列を文字列に変換してから、その文字列を最初に使用したのと同じバイト配列に戻すにはどうすればよいですか?

4

3 に答える 3

185

バイトを文字列に変換して元に戻す最も安全な方法は、base64 を使用することです。

string base64 = Convert.ToBase64String(bytes);
byte[] bytes = Convert.FromBase64String(base64);

そうすれば、サロゲート ペアの前半が後半なしのような「無効な」ユニコード シーケンスを取得しないことが保証されます。データを奇妙なもの (すべて ASCII) に正規化することを決定するものは何もありません。Unicode に登録されていないコード ポイントなどを使用する可能性はありません。ああ、カットアンドペーストも恐れることなくできます。

はい、最終的には 3 バイトごとに 4 文字になりますが、データが破損しないという知識のために支払う代償はわずかです。

于 2009-07-15T23:46:11.123 に答える
9

Convert以下のようにクラスを使用できます。

/// <summary>
/// Converts a string to byte array
/// </summary>
/// <param name="input">The string</param>
/// <returns>The byte array</returns>
public static byte[] ConvertToByteArray(string input)
{
    return input.Select(Convert.ToByte).ToArray();
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToString(byte[] bytes)
{
    return new string(bytes.Select(Convert.ToChar).ToArray());
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToBase64String(byte[] bytes)
{
    return Convert.ToBase64String(bytes);
}
于 2012-03-05T20:35:40.360 に答える
3

Convert.ToBase64 ドキュメントhttp://msdn.microsoft.com/en-us/library/dhx0d524.aspxを使用できます

于 2009-07-15T23:47:46.080 に答える