多数のASCII値(文字列形式)を読みやすいテキストに変換するC#

基本的に、私は以下のPythonコードと同じことを、ちょうどC#でやろうとしています。

ユーザーは、「104、101、108、108、111、44、32、119、111、114、108、100」のように、カンマで区切られたASCII値の長いリストを提供します。そしてその情報をテキストボックスに返します。私がこれをするべきであるよりはるかに複雑になるようにこれを作っているように感じますどんな助けでも大歓迎です、ありがとう!

decodeText = userInputBox.Text;
var arr = new string[] { decodeText};

int[] myInts = Array.ConvertAll(arr, int.Parse);

for(int i = 0; i < myInts.Length; i++)
{
    decodeBox.Text = not sure??
}

Pythonのサンプル:

    
      L = [104,101,108,108,111,44,32,119,111,114,108,100]       '' .join(map(chr、L))       「こんにちは、世界」

    
  

変換方法を教えてください。 Pythonの文字列へのASCII値のリストは?

1

6 答え

私はあなたがあなたの最初の試みでそこに良い方法であったと信じています:

var arr = userInputBox.Text.Split(‘,’);
textbox.Text = new string(Array.ConvertAll(arr, s => (char)(int.Parse(s)));

convertallを使用して文字列の配列をintの配列に変更した場合は、代わりにcharの配列を出力するようにcharにキャストを追加し(これについては後で説明します)、これをに渡すことで文字列に変換できます。新しい文字列のコンストラクタ

これにより、はるかにコンパクトな(そして正直に言うと1つのライナーにすることができる)形式になりましたが、コンパクトさは学習の観点からは必ずしも望ましいとは限りません。

したがって、理解しやすい場合は、これでコードが修正されます。

decodeText = userInputBox.Text;
var arr = decodeText.Split(‘,’);

int[] myInts = Array.ConvertAll(arr, int.Parse);

for(int i = 0; i < myInts.Length; i++)
{
    decodeBox.Text += (char)myInts[i];
}

欠けていた重要な部分(文字列を使って文字列を数値文字列の配列に分割するのとは別に)はintをcharに変換することでした

c#では、intからcharへの直接マッピングがあります。例えば、Aは65で、int 65を取り、それをcharにキャストすると、(char)はAになります。

それではこれを追加するだけです

整数のリストが長くなる場合は、文字列作成に文字列ビルダーを使用することを検討してください

1
追加された
詳細な説明をありがとう。私は自分の身近に気付いていませんでしたが、すべてがどのように機能しているか、およびそれを改善するためのより良い方法について、私がかなり理解してくれたのです。私は支持しました(まだ低い担当者、それでそれは公に表示されません)。再度、感謝します!!
追加された 著者 Justin,

入力をで分割してから文字列番号を実数に変換し、それをcharにキャストしてから char [] ctorを使って文字列を作成する必要があります。

var result = new string(userInputBox.Text.Split(',').Select(c => (char)int.Parse(c)).ToArray());
1
追加された
String finalString = String.Empty;

foreach(var item in myInts)
{
   int unicode = item;
   char character = (char) unicode;
   string text = character.ToString();
   finalString += text;
}

String Builderを使用して少しパフォーマンスを向上させたい場合。

StringBuilder finalString = new StringBuilder();

foreach(var item in myInts)
{
   char character = (char) item;
   builder.Append(character)
}
1
追加された
特定の理由でStringBuilderの使用を避けましたか?
追加された 著者 Caius Jard,
いいえ、パフォーマンスを最適化しませんでした。コードをもっと簡単に理解できるようにしたいだけでした。
追加された 著者 VibeeshanRC,
それがあなたの問題を解決した場合@Justin
追加された 著者 VibeeshanRC,
@ VibeeshanRCすごい!これは実際に私が必要としていたものです!コードを非常に理解しやすいものにしていますが、まだC#には慣れていません。これは他の概念にも役立ちます。ありがとうございます。
追加された 著者 Justin,

まっすぐ進む:

var data = new byte[]{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100};
var str = Encoding.ASCII.GetString(data);

.netフィドルのサンプル

テキスト入力からデータを変換する必要がある場合は、それを変換する必要があります。

var input = "104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100";
var data = Array.ConvertAll( 
    input
        .Split(',')
        .Select( e => e.Trim() )
        .ToArray(),
    Byte.Parse );
var str = Encoding.ASCII.GetString(data);

.netフィドルのサンプル

0
追加された
いい叫び声、そのバイト配列を生成するのを手助けするために少しだけ足し算が必要ですか。 Array.ConvertAll(String.Split、byte.Parse)なのでしょうか。
追加された 著者 Caius Jard,

int の配列ができたら

int[] asciis = new []{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100};

Linqでそれらを chars の配列に変換するのは簡単です。

var chars = asciis.Select(i=>(char)i).ToArray();

それから文字列表現へ(幸運にも、それを行う文字列コンストラクタがあります):

var text = new string (chars);
0
追加された

あなたはc#に入ったばかりなので、理解できるコードが必要です。

public class Program
{
    static void Main(string[] args)
    {
        string input = "104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100";

        String output = String.Empty;

        foreach (var item in input.Split(',').ToArray())
        {
            int unicode = Convert.ToInt32(item);
            var converted = char.ConvertFromUtf32(unicode);
            output += converted;
        }

        Console.WriteLine(output);
        Console.ReadLine();
    }
}

ConvertFromUtf32(int utf32): Converts the specified Unicode code point into a UTF-16 encoded string.

出力:

enter image description here

0
追加された
@ジャスティン、答えを見れば助けになるかもしれません:)
追加された 著者 ershoaib,