8字节[]字符串?
我有一个从我刚刚知道的文件中加载的byte[]
数组包含UTF-8。 在一些调试代码中,我需要将其转换为字符串。 有没有一个班轮可以做到这一点?
在封面下它应该只是一个分配和一个memcopy,所以即使它没有被实现,它也应该是可能的。
string result = System.Text.Encoding.UTF8.GetString(byteArray);
这种转换至少有四种不同的方式。
编码的GetString
,但如果这些字节具有非ASCII字符,则无法返回原始字节。
BitConverter.ToString
输出是一个“ - ”分隔的字符串,但没有.NET内置方法将字符串转换回字节数组。
Convert.ToBase64String
您可以使用Convert.FromBase64String
轻松地将输出字符串转换回字节数组。
注意:输出字符串可能包含'+','/'和'='。 如果您想在URL中使用该字符串,则需要对其进行明确编码。
HttpServerUtility.UrlTokenEncode
您可以使用HttpServerUtility.UrlTokenDecode
轻松地将输出字符串转换回字节数组。 输出字符串已经是URL友好的! 缺点是它需要System.Web
程序集,如果你的项目不是一个Web项目。
一个完整的例子:
byte[] bytes = { 130, 200, 234, 23 }; // A byte array contains non-ASCII (or non-readable) characters
string s1 = Encoding.UTF8.GetString(bytes); // ���
byte[] decBytes1 = Encoding.UTF8.GetBytes(s1); // decBytes1.Length == 10 !!
// decBytes1 not same as bytes
// Using UTF-8 or other Encoding object will get similar results
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);
// decBytes2 same as bytes
string s3 = Convert.ToBase64String(bytes); // gsjqFw==
byte[] decByte3 = Convert.FromBase64String(s3);
// decByte3 same as bytes
string s4 = HttpServerUtility.UrlTokenEncode(bytes); // gsjqFw2
byte[] decBytes4 = HttpServerUtility.UrlTokenDecode(s4);
// decBytes4 same as bytes
当你不知道编码时从字节数组转换为字符串的一般解决方案:
static string BytesToStringConverted(byte[] bytes)
{
using (var stream = new MemoryStream(bytes))
{
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
}
链接地址: http://www.djcxy.com/p/21111.html
上一篇: 8 byte[] to string?
下一篇: How do you convert a byte array to a hexadecimal string, and vice versa?