2009-07-15 9 views
59

まったく同じバイト配列を返す限り、私は実際にエンコーディングやものを気にしません。バイト配列を文字列とバックに安全に変換する方法はありますか?

まとめ:バイト配列を文字列に変換してから、その文字列を最初に同じバイト配列に変換するにはどうすればよいですか?

+1

@Mehrdadら、これは ".NET String to byte Array C#"と同じ質問ではありません。ここでの質問は、バイト配列を文字列に変換して、安全に戻す方法です。私は、 "魔法の" Latin1エンコーディング(Encoding.GetEncoding(28591))を使用しています。これは、バイト=>文字列=>バイトをうまく尊重しているようです。 – Liam

答えて

122

文字列と背中にバイトを変換する絶対安全な方法は、BASE64を使用することです:

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

あなたがそのような代理の前半として「無効」Unicodeシーケンスを取得しないことが保証しているその方法ペアは後半なし。データを何か変なものにすることは決して決して決してありません(すべてASCIIです)。 Unicodeなどで登録されていないコードポイントを使用する機会はありません。ああ、あなたはあまりにも恐れなしにカットアンドペーストすることができます。

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

+0

この投稿は答えとして上記を置き換える必要があります。 :) –

+0

完了。最初はメモを見なかった。非常に重要!ありがとう、もう一度Jon Skeet =) – Svish

+2

もう一度Skeetさんが私の質問に答えてくれました。 :) – UnkwnTech

2

Convert.ToBase64のマニュアルを使用することができます。

/// <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); 
} 
+1

複数の質問に定型文/逐語回答をコピーして貼り付けるときには注意が必要です。コミュニティでは「スパム」と表示される傾向があります。あなたがこれをしている場合、それは通常質問が重複していることを意味しますので、そのようにフラグを立てます:http://stackoverflow.com/questions/472906 – Kev

+0

それを残念に残して、私は他の答えを削除しました。重複としてフラグを立てる方法はわかりません。 –

関連する問題