2016-07-19 3 views
-1

Я знаю, что этот вопрос задавался два раза перед переполнением стека, но на этот раз я прошу максимально гарантированный способ сделать это (способ, который не меняет значение данных). Я хочу преобразовать из строки в байт [], затем обратно в строку. Я мог бы использовать ByteConverter, Convert, Encoding, BitConverter, HttpServerUtility.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 -hexadecimal-string-and-vice-versa) «не для вас? –

ответ

1

Я хочу преобразовать из строки в байт [], затем обратно в строку.

Если это то, что вы на самом деле пытается сделать все, что вам нужно сделать, это просто использовать 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 [], для Somthing как, что вам нужно использовать что-то вроде Convert.ToBase64String(byte[]) и Convert.FromBase64String(string). Использование Encoding.UTF8.GetString(byte[]) на то, что не было правильно отформатированной строкой UTF8, потенциально может привести к потере данных при преобразовании.