-2
string txt="sentence";

我正在尝试获取字符串中每个字符的 ascii 值,如何在 C# winforms 中执行此操作?

4

2 回答 2

5
string txt = "sentence";
int[] asciiArray = txt.Select(r => (int)r).ToArray();

稍后对于输出,您可以执行以下操作:

foreach (var item in asciiArray)
    Console.WriteLine(item);

你会得到:

115
101
110
116
101
110
99
101

但请记住,这不仅限于 ASCII 值,如果字符是 Unicode,您将获得它的整数表示。

你可以用一个简单的foreach循环来做到这一点,比如:

string txt = "sentence";
foreach (char c in txt)
    Console.WriteLine((int)c);

或者for像这样的循环:

string txt = "sentence";
for (int i = 0; i < txt.Length; i++)
    Console.WriteLine((int)txt[i]);

重要的一点是将它转换int为获取 int 值,这对于 ASCII 字符来说就是ASCII值。

于 2013-10-28T19:39:25.920 回答
3

C# 字符串是 UTF-16 编码的Unicode,而不是 ASCII。这意味着每个char都是 16 位无符号值。一个特定的 Unicode字形可以由 1 个或 2 个这样的 16 位值表示。

获取 ASCII 值的“正确”方法是使用 ASCII 编码类:

string s     = "The quick brown fox jumped over the lazy dog" ;
byte[] bytes = Encoding.ASCII.GetBytes( s ) ;

由于 ASCII 仅涵盖 0x00–0x7F 范围(128 个字符),因此该范围之外的任何代码点都将转换为 0x3f ( '?')。

考虑使用 UTF-8 或至少支持 0x00-0xFF ( Encoding iso = Encoding.GetEncoding("ISO-8859-1")) 的编码,以防止数据丢失。

于 2013-10-28T19:54:25.697 回答