如何在 C# 中获取字符的 ASCII 值

3

以下是我在C#中的字符串,我将其转换为字符数组,并需要获取字符串中每个字符的ASCII值。

static void Main(string[] args)
    {
        string s = "Test";
        var arr = s.ToCharArray();
        foreach(var a in arr)
        {
            var n = Encoding.ASCII.GetByteCount(a.ToString());
            Console.WriteLine(a);
            Console.WriteLine(n);
        }
    }

这个输出为:
T
1
e
1
s
1
t
1

在谷歌上搜索我得到了许多链接,但它们都不能满足我的需求。 我需要获取字符串中每个字符的ASCII值。任何帮助/建议都将不胜感激。

请参见:https://dev59.com/em445IYBdhLWcg3wLXIK - NoChance
5个回答

3

一个字符串可以直接枚举为IEnumerable<char>。每个char都可以转换为整数,以查看其UNICODE“值”(代码点)。 UTF-16将ASCII的128个字符(0-127)映射到UNICODE代码点0-127(例如,请参见https://en.wikipedia.org/wiki/Code_point),因此您可以直接打印此数字。

string s = "Test";
foreach (char a in s)
{
    if (a > 127)
    {
        throw new Exception(string.Format(@"{0} (code \u{1:X04}) is not ASCII!", a, (int)a));
    }
    Console.WriteLine("{0}: {1}", a, (int)a);
}

是的。你和Matt的回答都满足了我的需求。我会给你点赞,但我必须接受一个答案。你能否请检查一下他的帖子并添加更好的输入。我认为你的答案更好,因为它不涉及额外的方法调用。你觉得呢? - Kgn-web
1
我喜欢异常!但是,你把一个单独的UTF-16代码单元放入消息字符串中,这在.NET中可能是有效的,但会破坏一些期望。如果你将其格式化为String.Format(@"\u{0:X04}…", (int)a),那么它仍然可以被理解。 - Tom Blodget

2

在ASCII表中,每个字符都用0到127之间的值表示。将字符转换为整数,您将能够获得ASCII值。

 static void Main(string[] args)
        {
            string s = "Test";
             for (int i = 0; i < s.Length; i++)
                {
                    //Convert one by one every leter from the string in ASCII value.
                    int value = s[i];
                    Console.WriteLine(value);
                }
        }

2
虽然这段代码可能是解决方案,但包括说明真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您的代码建议原因。 - Adam

2

GetByteCount会返回所使用的字节数,因此对于每个字符,它将是1个字节。

尝试使用GetBytes

  static void Main(string[] args)
    {
        string s = "Test";
        var n = ASCIIEncoding.ASCII.GetBytes(s);
        for (int i = 0; i < s.Length; i++)
        {                
            Console.WriteLine($"Char {s[i]} - byte {n[i]}");
        }
    }

是的。你和xanatos的回答都满足了我的需求。我会给你点赞,但我必须接受一个答案。你能否请检查他的帖子并添加更好的建议呢? - Kgn-web
我认为他的建议更好,因为他没有涉及额外的方法。 - Kgn-web
哦..保重啊,伙计。& 如果您觉得这篇帖子有价值,请给我点赞?感谢分享您的意见。 - Kgn-web
是的,这可能更有效率。 - Matt
这个方法会默默地用问号替换那些不在ASCII字符集中的字符(码点)。如果你喜欢,你仍然可以使用这种技术并得到一个异常,例如:Encoding.GetEncoding("US-ASCII", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetBytes("…") - Tom Blodget

0

0
Console.WriteLine(a);   
Console.WriteLine(((int)a).ToString("X"));

你需要先将其转换为整数,然后再转换为十六进制。

GetByteCount 将返回使用的字节数计数,因此每个字符将占用 1 个字节。

你还可以阅读:需要将字符串/字符转换为 ASCII 值


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