发布日期:2018-03-26
在C#中怎么样不用手动指定编码就能得到字符串一连串的比特表示形式。+ 查看更多
在C#中怎么样不用手动指定编码就能得到字符串一连串的比特表示形式。
+ 查看更多
发布日期:2018-02-26 17:21
分类:C#
浏览次数:226
在C#中我怎么样才能无需手动指定一个特定的编码就可以将一个字符串转换为字节数组。
我打算加密一条字符串。虽然我不转换就能加密它。可我还是想知道为什么编码会在这里运行。只是给了我所说的字符。
还有,为什么要考虑编码?我不能简单地得到字符串所存储的位置的字符吗?为什么会有对字符编码的依赖?
回答
正如你所提到的,你的目标是,简单地“获取字符串存储位置的字节”。与这里的答案相反,如果不需要解释字节,就不必担心编码问题!(当然,能够从字节重新构造字符串)。
为了实现这个目标,我真的不明白为什么人们一直告诉你你需要去编码。你完全不需要担心要去编码。
只用做下面这个:
static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } static string GetString(byte[] bytes) { char[] chars = new char[bytes.Length / sizeof(char)]; System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); return new string(chars); }
只要你的程序(或其他程序)不试图以某种方式解释字节,而且你也没有提到你打算这么做,那么这个方法是不会出错的!你担心编码只会让你的过得更复杂却没有什么真正的原因。
这种方法的额外好处:
如果字符串包含无效字符,也没有关系,因为您仍然可以得到数据并重建原始字符串!
它将的编码和解码相同,因为你只是看着字节。
如果您使用了特定的编码,虽然它会给您带来麻烦,编码/解码无效字符。