C#で文字列のASCII値を取得する方法


108

C#で文字列内の文字のASCII値を取得したい。

文字列の値が「9quali52ty3」の場合、11文字のそれぞれのASCII値の配列が必要です。

C#でASCII値を取得するにはどうすればよいですか?


数字だけでなくアルファベット文字だけが欲しいということですか?結果として「品質」が必要ですか?そのため、ASCIIについて話すことはほとんど意味がありません。
Lars Truijens、2008

その文字列の各文字のアスキー、数字のアスキー、単語「品質」のアスキーが欲しい
RBS

つまり、文字列全体をASCIIで表すことができると仮定して、文字列内の各文字の数値ASCII値が必要です。現在の表現は非常に混乱しています。
bzlm 2009

回答:


189

MSDNから

string value = "9quali52ty3";

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

これで、バイトのASCII値の配列ができました。私は以下を得ました:

57113117 97108105 53 50116121 51


これは私にSystem.Byte []を示しています。単語内の文字をループする必要があります。どのように機能させたのかわかりません。重要なのはOPを支援したことです。
NikosV 2018

注: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、2010年

22

これはうまくいくはずです:

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

8

数字だけでなくアルファベット文字だけが欲しいということですか?結果として「品質」が必要ですか?Char.IsLetterまたはChar.IsDigitを使用して、1つずつフィルターで除外できます。

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値を実装する例の1つでもあります
mahesh

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

私の記憶が正しければ、ASCII値はUnicode番号の下位7ビットの数です。



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

以前の回答者は質問に答えましたが、タイトルが私に期待させる情報を提供していません。1文字の文字列を返すメソッドがありましたが、16進数に変換できる文字が必要でした。次のコードは、他の人に役立つことを期待して見つけたと思うものを示しています。

  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£Δ√

a 97 61

£163 A3

Δ916 394

√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値の配列が必要です。

しかし、コンソールでは率直に作業しているので、間違っている場合はcharを取得してASCIIコードを出力するので、私の答えを修正してください。

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

この回答では、もう少し説明を使用できます。英語に堪能な同僚がいる場合は、敬意を持って助けを求めてください。
O.ジョーンズ

私の説明は非常に単純です。コードが変数なしで非常に単純ですが、ASCII値を個別に出力する方法を簡単に使用できます。個別に文字を取得し、文字を整数値に変換します。これを実装して、説明に間違いがある場合は、この感謝を正してください
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
このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、投票数が増える可能性があります。あなたが今尋ねている人だけでなく、将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。
ダーマン

コンパイルエラー:「予期しない文字」。ToStringの後の2つの `はおそらく存在すべきではありません。
BDL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.