web-dev-qa-db-ja.com

バイト配列を安全に文字列に変換して戻すにはどうすればよいですか?

正確に同じバイト配列を取り戻す限り、エンコードやものはあまり気にしません。

要約すると、バイト配列を文字列に変換し、その文字列を元のバイト配列に戻すにはどうすればよいですか?

84
Svish

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

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

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

はい、最終的には3バイトごとに4文字になりますが、データが破損しないという知識を得るには少額の費用がかかります。

159
Jon Skeet

以下のように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);
}
7
Ricky G

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

2
Aragorn