2016-07-19 73 views
-1

我知道這個問題在堆棧溢出之前被問了兩次,但這次我要求最有保證的方式(不改變數據值的方式)。我想從字符串轉換爲字節[]然後回到字符串。我可以用ByteConverterConvertEncodingBitConverterHttpServerUtility.UrlTokenEncode/HttpServerUtility.UrlTokenDecode下面的代碼:字節[]和字符串之間轉換的最佳方式是什麼?

string s2 = BitConverter.ToString(bytes); // 82-C8-EA-17 
String[] tempAry = s2.Split('-'); 
byte[] decBytes2 = new byte[tempAry.Length]; 
for (int i = 0; i < tempAry.Length; i++) 
{ 
    decBytes2[i] = Convert.ToByte(tempAry[i], 16); 
} 

或下面的代碼:

private string ToString(byte[] bytes) 
{ 
    string response = string.Empty; 

    foreach (byte b in bytes) 
     response += (Char)b; 

    return response; 
} 

如果你不還是得到我想要的,我想知道是哪個方式的作品,而不是,我想知道應該使用哪種方式。嘿,我寧願使用最小大小的字節數組,因爲我將通過網絡發送這個數組,我將使用前256個字節。

+0

如果您想要使用最少數據量的數據['Convert.ToBase64String'](https://msdn.microsoft.com/en-us/library/system.convert.tobase64string(v = vs.110) ).aspx)會給你一個比上面列出的所有項目更短的字符串。 –

+2

另外,什麼問題「[如何將字節數組轉換爲十六進制字符串,反之亦然?](http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to - 十六進制字符串 - 反之亦然)「不適合你? –

回答

1

我想從字符串轉換爲byte []然後返回字符串。

如果這是你實際上是試圖做所有你需要做的只是用Encoding.UTF8.GetBytes(string)在發送端和Encoding.UTF8.GetString(byte[])接收方。

private byte[] ToBytes(string message) 
{ 
    return Encoding.UTF8.GetBytes(message); 
} 

private string ToString(byte[] bytes) 
{ 
    return Encoding.UTF8.GetString(bytes); 
} 

這將給你一個往返轉換任何字符串爲字節並返回字符串再次以最少的字節數。

這將工作要做的byte []一樣,你需要使用類似Convert.ToBase64String(byte[])Convert.FromBase64String(string)串爲byte [],對財產以後。在格式不正確的UTF8字符串上使用Encoding.UTF8.GetString(byte[])可能會導致轉換中的數據丟失。

相關問題