如何在C#中获得字符串的一致字节表示,而无需手动指定编码?

2364

在.NET (C#)中,如何将string转换为byte[]而不手动指定特定的编码?

我要对这个字符串进行加密。我可以不进行转换就进行加密,但我仍然想知道为什么编码在这里起作用。

此外,为什么需要考虑编码?我不能简单地获取字符串存储在哪些字节中吗?为什么存在字符编码的依赖关系?


30
每个字符串都是以字节数组的形式存储的,对吗?那我为什么不能直接拿到这些字节呢? - Agnel Kurian
149
编码是将字符映射到字节的过程。例如,在ASCII编码中,字母'A'映射到数字65。在不同的编码中可能会有所不同。不过,在.NET框架中采用的字符串高级处理方法使这个问题基本上不重要,除了这种情况。 - Lucas Jones
23
作为一名“魔鬼的代言人”,假设您想要获取一个存在内存中的字符串的字节(就像.NET使用它们一样),并对它们进行某些操作(例如CRC32),而且永远不需要将其解码回原始字符串...那么您为什么要关心编码以及如何选择使用哪种编码方式,这并不是一件简单的事情。 - Greg
88
很惊讶还没有人给出这个链接: http://www.joelonsoftware.com/articles/Unicode.html(注:该链接为一篇关于Unicode编码的文章) - Bevan
36
一个字符不等于一个字节,一个字节也不等于一个字符。字符既是字体表中的关键,也是语法传统中的一部分。字符串是字符序列。(词语、段落、句子和标题也有自己的语法传统,需要定义相应的类型--但我偏离了主题)。像整数、浮点数和其他所有数据类型一样,字符被编码成字节。曾经有一段时间,字符的编码是简单的一对一映射:ASCII码。然而,为了包含人类所有符号,一个字节的256种排列组合是不足够的,所以设计了多种编码方式以有选择地使用更多的字节。 - George
显示剩余26条评论
41个回答

-12

问题提问者问:"如何在.NET(C#)中将一个 string 转换为一个 byte 数组?" [sic]

您可以使用以下代码:

static byte[] ConvertString (string s) {
    return new byte[0];
}

作为一个好处,编码并不重要!哦等等,这是一种编码...它只是微不足道且高度损失的。

这不是转换,而是一个新的字节数组。OP 真正需要的是指针和 memcpy。或者使用强制类型转换:byte[] b = (byte[]) s;。 - Lodewijk
2
此外,“s”在这里根本没有使用。绝对不是一个解决方案。 - Niki Romagnoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接