【问题标题】:How to get ASCII value of characters in C#如何在C#中获取字符的ASCII值
【发布时间】:2017-09-08 07:20:53
【问题描述】:

下面是我在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值???

非常感谢任何帮助/建议。

【问题讨论】:

标签: c# asp.net string character ascii


【解决方案1】:

string 可以直接枚举为IEnumerable<char>。并且每个char 都可以转换为整数以查看其UNICODE“值”(代码点)。 UTF-16 将 ASCII(0-127)的 128 个字符映射到 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);
}

【讨论】:

  • Yes.Correct Yours & Matt 都满足了我的需要。我赞成你的帖子,但我必须接受一个答案。您能否检查他的帖子并添加更好的输入。我认为你的更好,因为它不涉及调用你所说的额外方法
  • 我喜欢例外!但是,您将单个 UTF-16 代码单元本身放入消息字符串中,这在 .NET 中可能是有效的,但会打破一些预期。如果您将其格式化为String.Format(@"\u{0:X04}…", (int)a),则仍然可以理解。
【解决方案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]}");
        }
    }

【讨论】:

  • Yes.Correct Yours & xanatos 都满足我的需要。我赞成你的帖子,但我必须接受一个答案。你能检查他的帖子并添加更好的输入吗
  • 我认为他的建议更好,因为他不涉及额外的方法。
  • 哦..保重,伙计。 &如果你觉得值得,请点赞我的帖子?感谢您分享您的意见
  • 是的,他的效率可能更高。
  • 这个会默默地用 '?' 替换不在 ASCII 字符集中的字符(代码点) (这是)。如果您更喜欢Encoding.GetEncoding("US-ASCII", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetBytes("…"),您仍然可以使用此技术并获得异常。
【解决方案3】:

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);
                }
        }

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案4】:

当您应该询问字节本身时,您正在询问字节数。使用Encoding.ASCII.GetBytes 而不是Encoding.ASCII.GetByteCount。就像在这个答案中一样:https://stackoverflow.com/a/400777/3129333

【讨论】:

    【解决方案5】:
    Console.WriteLine(a);   
    Console.WriteLine(((int)a).ToString("X"));
    

    您需要先转换为 int,然后再转换为 hex。

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

    您也可以阅读:Need to convert string/char to ascii values

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 2023-04-04
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多