Zeichensatzkennung



  • Hallo.
    Wie dem Titel zu entnehmen ist arbeite ich gerade an einem Programm in C# zur Zeichensatzkennung.

    Dabei geht es darum ASCII - Zeichen nach zweiter Zeichenkennung in C# auszugeben. sprich: 3F = ?, 40 = § usw...

    So, ich habe das Programm soweit fertig indem man in eine Textbox "3F" eingeben kann um "?" zu erhalten und umgekehrt.
    Desweiteren hab ich einen Zwischenspeicher der es ermöglicht Zeichen zu speichern und bei einer weiteren Eingabe wieder auszugeben.

    So das Erste was stört is der ellenlange Quelltext nur für die bestimmung der Zeichen. (es geht von 20 bis 7E und das nochmal umgekehrt 7E bis 20)

    So und nun ist das andere Problem... Ich will auch Wörter eingeben können die dann in dem HEX-Code ausgegeben werden. also man gibt ein "Hallo" und rauskommen soll "48616C6C6F". Weiterhin sollen nur bis zu 20 Zeichen ausgegeben werden. So und da das noch nicht kompliziert genug klingt poste ich gleich mal den quelltext mit aber ein wenig gekürzt: 😃

    namespace Zeichensatzkennung
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void btnkennung_Click(object sender, EventArgs e)
    {
    if (txteingabe.Text == " ")
    lblausgabe.Text = "20";
    if (txteingabe.Text == "!")
    lblausgabe.Text = "21";
    if (txteingabe.Text == "*")
    lblausgabe.Text = "22";
    if (txteingabe.Text == "#")
    lblausgabe.Text = "23";
    // ...
    if (txteingabe.Text == "7D")
    lblausgabe.Text = "ü";
    if (txteingabe.Text == "7E")
    lblausgabe.Text = "ß";

    lblspeicher.Text = lblausgabe.Text;
    btnk2.Visible = true;
    btnkennung.Visible = false;

    if (txteingabe.Text == "")
    lblausgabe.Text = "";
    txteingabe.Text = "";

    }

    private void btnEnde_Click(object sender, EventArgs e)
    {
    Close();
    }

    private void btnweiter_Click(object sender, EventArgs e)
    {
    txteingabe.Text = "";
    lblausgabe.Text = "";
    lblspeicher.Text = "";
    btnkennung.Visible = true;
    btnk2.Visible = false;
    }

    private void btnk2_Click(object sender, EventArgs e)
    {
    if (txteingabe.Text == " ")
    lblausgabe.Text = "20";
    if (txteingabe.Text == "!")
    lblausgabe.Text = "21";
    if (txteingabe.Text == "*")
    lblausgabe.Text = "22";
    // ...
    if (txteingabe.Text == "7D")
    lblausgabe.Text = "ü";
    if (txteingabe.Text == "7E")
    lblausgabe.Text = "ß";

    lblausgabe.Text = lblspeicher.Text + lblausgabe.Text;
    lblspeicher.Text = lblausgabe.Text;

    if (txteingabe.Text == "")
    lblausgabe.Text = "";

    txteingabe.Text = "";
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    txteingabe.Text = "";
    btnk2.Visible = false;
    btnkennung.Visible = true;
    lblspeicher.Visible = false;
    }

    }
    }

    Also wer das wirrwar verstanden hat und Vorschläge hat, (vllt auch wie ich mir die 5 mrd zeilen zur Bestimmung von den Zeichen sparen kann) dem wäre ich sehr dankbar 🙂

    P.S.: ich vermute mal ich muss da was mit Arrays, Iterationen oder Zeichenfolgen oder sowas machen aber ich bin hab keinen Plan. 😕



  • nochwas... falsch formuliert *g*

    So und nun ist das andere Problem... Ich will auch Wörter eingeben können die dann in dem HEX-Code ausgegeben werden. also man gibt ein "Hallo" und rauskommen soll "48616C6C6F". Weiterhin sollen nur bis zu 20 Zeichen ausgegeben werden.

    ich meine damit nur 20 zeichen eingegeben werden wieviele rauskommen is ja wurscht sind dann ja maximal 40... wollt ich nur noch anmerken 🙂



  • <ironie>
    Woh, dieser Code ist ja super gut -(
    </ironie>

    Also, ein String besteht aus einzelnen Zeichen (Chars), welche wiederum als ASCII-Zeichen dargestellt werden können, intern sind es aber einfach nur Binärzahlen.

    Nun brauchst du nur in einer Schleife alle Zeichen des Strings durchlaufen und für jedes Zeichen den Hexcode ausgeben.

    string text = "Hallo";
    string output = "";
    foreach(char c in text)
    {
      int n = (int)c;
    
      output += n.ToString("x"); // <-  "x" bzw. "X" = hexadecimal
    }
    

    Um aus einen 2 Byte Hex-String den char zu erhalten, einfach umgekehrt:

    string text = "48616C6C6F";
    string output = "";
    for(int i=0; i<text.Length(); i+=2)
    {
      string sHex = text[i] + text[i+1];
      output += (char)Int32.Parse(sHex, NumberStyles.HexNumber); <-- evtl hier noch mal in der Hilfe nachlesen
    }
    

    Und für die maximale Textlänge kannst du die Eigenschaft TextBox.MaxLength setzen.



  • Danke. Ich probiers gleich mal aus 🙂



  • Hallo nochmal th.

    Ähm kleine Frage: Wo muss ich das denn hinschreiben? 😕
    ...Bin nich die große Leuchte in C# 😞



  • Vieleicht solltest du dir erstmal ein Tutorial anschauen???

    Gedacht waren meine Code-Schnipsel als Ersatz für deine ganzen "if"-Anweisungen in den Button-Click-Methoden.

    Natürlich mußt du dann noch die Variablennamen anpassen, also z.B. "txteingabe.Text" statt "text" verwenden.

    Besser wäre es eigentlich, wenn du diese als eigenen Methoden definierst und sie nur in den Button-Click-methoden aufrufst, aber ich befürchte, soweit bist du noch nicht -) ... aber wie gesagt, ein C#-Tutorial sollte helfen...



  • Tag nochmal.

    Auch ein blindes Huhn findet ein Korn. und ich habs gefunden \(o)/
    Hatte dabei aber ne kleine menschliche Unterstützung. Trotzdem danke für die Hilfe und für die Geduld *fg*

    schönen Tag noch

    guß
    Das Corn


Anmelden zum Antworten