Using C#, what is the most efficient method of converting a string containing binary data to an array of bytes虽然有100种方法可以解决转换问题,但我将重点放在性能上。 假设该字符串仅包含二进制数据,就性能而言,在C#下将数据转换为byte [](不是char [])的最快方法是什么? 说明:这不是ASCII数据,而是恰好在字符串中的二进制数据。 UTF8Encoding.GetBytes 我不确定ASCIIEncoding.GetBytes是否会这样做,因为它仅支持范围0x0000到0x007F。 您告诉该字符串仅包含字节。但是.NET字符串是一个char数组,而1个char是2个字节(因为.NET将字符串存储为UTF16)。因此,可以有两种情况来存储字节0x42和0x98: 在第一种情况下,结果将是0x42和0x3F(" B?"的ASCII码)。第二种情况将导致0x3F("?"的ascii)。这是合乎逻辑的,因为char超出有效的ascii范围,并且编码器不知道如何处理这些值。 所以我想知道为什么它是一个带有字节的字符串?
如果确实有情况2,并且想从中取出字节,则应该使用UnicodeEncoding.GetBytes调用。因为那将返回0x42和0x98。 如果要从char数组转换为byte数组,最快的方法是封送处理。但这不是很好,并且使用双内存。
如果要从字符串转换为二进制数据,则必须首先知道使用哪种编码将二进制数据转换为字符串。否则,您可能无法获得正确的二进制数据。因此,最有效的方法可能是Encoding子类上的GetBytes()(例如UTF8Encoding),但是您必须确定要知道哪种编码。 Kent Boogaart对原始问题的评论很好地总结了这一点。 ;] C#中没有ASCII字符串!字符串始终包含UTF-16。不意识到这一点会导致很多问题。就是说,前面提到的方法是有效的,因为它们将字符串视为UTF-16编码,并将字符转换为ASCII符号。
/ EDIT作为澄清:二进制数据如何进入字符串?字符串不应该包含二进制数据(为此使用 |