任何字节数组都可以转换为字符串吗?

时间:2013-09-06 21:46:09

标签: c# string type-conversion bytearray

任何字节数组都可以转换为字符串吗?或者有些字节值不可用或根据字符串的编码无法转换为字符?

3 个答案:

答案 0 :(得分:4)

如果启动作为文本,您应该只尝试将字节数组转换为字符串。如果字节数组实际上是图像文件,视频或编码或压缩数据的内容,则尝试使用编码将其直接转换为字符串。这样做最终总是很糟糕:使用ISO-8859-1你可能没问题,但这基本上是一个坏主意,你真的不应该这样做。

相反,您应该使用Convert.ToBase64String将其转换为Base64,或者将其转换为十六进制。

如果你使用Base64,你可以使用Convert.FromBase64String将文本转换回字节数组。

答案 1 :(得分:2)

  

可以将任何字节数组转换为字符串吗?

Base64似乎是字节数组的恰当表示:

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

在.NET中,您可以使用ToBase64String方法来实现此目的。

此外,你似乎在你的问题中谈到了字符串的一些编码,但在.NET中,所有字符串都是UTF-16编码的,所以我不太明白你的意思是什么

答案 2 :(得分:0)

可以使用各种编码将字符串转换为字节序列。某些编码可以将任何可能的字符串转换为某些字节序列;其他只会使用包含有限种类字符的字符串,但对于每个可能的字节序列,都会存在一个字符串,可以产生它。一些编码方法会将任何可能的字符串转换为偶数长度的字节序列,并允许将任何偶数长度的字节序列转换回字符串,但不能产生奇数长度的字符串。我不知道任何编码方法在所有可能的字符串和所有可能的任意长度字节序列之间创建一对一的关系。

曾几何时,字符串是保存任意字节序列的便捷方式,但在.NET中,如果数据被过滤,它们可能仅用作保存二进制数据的方法,以确保它不会被包含在内。 t包含任何无效的字符或序列。我希望有一个"不可变的字节序列"可用于此目的的类型,曾经由字符串提供,但我不知道一个。