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


108

我想在C#中获取字符串中字符的ASCII值。

如果我的字符串的值为“ 9quali52ty3”,则我需要一个包含11个字符中每个字符的ASCII值的数组。

如何在C#中获取ASCII值?


您是说只想要字母字符而不想要数字吗?因此,您想要“质量”吗?因为然后谈论ASCII没有什么意义。
拉尔斯·特鲁伊恩斯

我想要该字符串中每个字符的Ascii,数字的Ascii以及单词“ quality”的ascii
RBS

您的意思是,假设整个字符串可以用ASCII表示,则您需要字符串中每个字符的数字ASCII值。您当前的措辞非常令人困惑。
bzlm

Answers:


189

MSDN

string value = "9quali52ty3";

// Convert the string into a byte[].
byte[] asciiBytes = Encoding.ASCII.GetBytes(value);

现在,您有了字节的ASCII值的数组。我得到以下内容:

57113117 97 108 105 53 50 116 121 51


这显示了System.Byte []。您需要遍历单词中的字符。不知道如何使它工作。帮助了OP,但这很重要。
NikosV

注意:Encoding.ASCII配置为为不在ASCII字符集中的字符发出替换字符('?')的ASCII码单元。Encoding该类中还提供其他选项(包括引发异常)。当然,还可以使用其他字符编码,尤其是UTF-8。人们应该质疑是否真正需要的是ASCII。
汤姆·布洛杰特

37
string s = "9quali52ty3";
foreach(char c in s)
{
  Console.WriteLine((int)c);
}

12
结果代码是Unicode数字,并且可能包含非ASCII代码。
Lars Truijens

22

这应该工作:

string s = "9quali52ty3";
byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
foreach(byte b in ASCIIValues) {
    Console.WriteLine(b);
}

8

您是说只想要字母字符而不想要数字吗?因此,您想要“质量”吗?您可以使用Char.IsLetter或Char.IsDigit来一一过滤掉它们。

string s = "9quali52ty3";
StringBuilder result = new StringBuilder();
foreach(char c in s)
{
  if (Char.IsLetter(c))  
    result.Add(c);
}
Console.WriteLine(result);  // quality

4
string value = "mahesh";

// Convert the string into a byte[].
byte[] asciiBytes = Encoding.ASCII.GetBytes(value);

for (int i = 0; i < value.Length; i++)


    {
        Console.WriteLine(value.Substring(i, 1) + " as ASCII value of: " + asciiBytes[i]);
    }

3
这也是为给定字符串中的每个字符实现ascii值的示例之一
mahesh 2012年

4
string text = "ABCD";
for (int i = 0; i < text.Length; i++)
{
  Console.WriteLine(text[i] + " => " + Char.ConvertToUtf32(text, i));
}

如果我没记错的话,ASCII值就是Unicode数字的低7位数字。


3

如果要为字符串中的每个字符使用字符代码,则可以执行以下操作:

char[] chars = "9quali52ty3".ToCharArray();

3
byte[] asciiBytes = Encoding.ASCII.GetBytes("Y");
foreach (byte b in asciiBytes)
{
    MessageBox.Show("" + b);
}

3

该程序将接受多个字符并输出其ASCII值:

using System;
class ASCII
{
    public static void Main(string [] args)
    {
        string s;
        Console.WriteLine(" Enter your sentence: ");
        s = Console.ReadLine();
        foreach (char c in s)
        {
            Console.WriteLine((int)c);
        }
    }
}

2

较早的答复者已经回答了问题,但没有提供标题使我期望的信息。我有一个返回一个字符串的方法,但是我想要一个可以转换为十六进制的字符。以下代码演示了我认为可以对其他人有所帮助的想法。

  string s = "\ta£\x0394\x221A";   // tab; lower case a; pound sign; Greek delta;
                                   // square root  
  Debug.Print(s);
  char c = s[0];
  int i = (int)c;
  string x = i.ToString("X");
  c = s[1];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[2];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[3];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);
  c = s[4];
  i = (int)c;
  x = i.ToString("X");
  Debug.Print(c.ToString() + " " + i.ToString() + " " + x);

上面的代码将以下内容输出到立即窗口:

a£Δ√

一个97 61

£163 A3

Δ916394

√8730 221A


2

您可以使用以下方法删除BOM表

//Create a character to compare BOM
char byteOrderMark = (char)65279;
if (sourceString.ToCharArray()[0].Equals(byteOrderMark))
{
    targetString = sourceString.Remove(0, 1);
}

1

或在LINQ中:

string value = "9quali52ty3";
var ascii_values = value.Select(x => (int)x);
var as_hex = value.Select(x => ((int)x).ToString("X02"));

0

我想在C#中获取字符串中字符的ASCII值。

每个人都以此结构给出答案。如果我的字符串的值为“ 9quali52ty3”,则我需要一个包含11个字符中每个字符的ASCII值的数组。

但是在控制台中,我们很坦率,所以如果我输入错误,我们会得到一个字符并打印ASCII码,因此请更正我的回答。

 static void Main(string[] args)
        {
            Console.WriteLine(Console.Read());
            Convert.ToInt16(Console.Read());
            Console.ReadKey();
        }

这个答案可以使用更多的解释。如果您的同事英语说得比较流利,则应该向您寻求帮助。
O. Jones

我的解释非常简单,因为我的代码非常简单,没有任何变量,但是使用了一个简单的概念,即如何可以打印ASCII值,单个简单地获取一个char并将char转换为整数值,所以请您实现这一点,如果我的解释有误,那么请您纠正此感谢
MA Nadeem

0

为什么不采用老式的简便方法呢?

    public int[] ToASCII(string s)
    {
        char c;
        int[] cByte = new int[s.Length];   / the ASCII string
        for (int i = 0; i < s.Length; i++)
        {
            c = s[i];                        // get a character from the string s
            cByte[i] = Convert.ToInt16(c);   // and convert it to ASCII
        }
        return cByte;
    }

-1
    string nomFile = "9quali52ty3";  

     byte[] nomBytes = Encoding.ASCII.GetBytes(nomFile);
     string name = "";
     foreach (byte he in nomBytes)
     {
         name += he.ToString("X02");
     }
`
     Console.WriteLine(name);

//现在更好了;)


1
尽管这段代码可以解决问题,但包括解释如何以及为何解决该问题的说明,确实可以帮助提高您的帖子质量,并可能导致更多的投票。请记住,您将来会为读者回答问题,而不仅仅是现在问的人。请编辑您的答案以添加说明,并指出适用的限制和假设。
Dharman

给出编译错误:“意外字符”。ToString之后的两个`可能不应该在那里。
BDL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.