2016-07-19 72 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[])可能会导致转换中的数据丢失。

相关问题