www.mikrocontroller.net

Forum: PC-Programmierung String to ASCII Verständnissproblem!


Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.dotnetspider.com/resources/18881-How-Co...

Das habe ich im Internet gefunden und damit ist auch mein 
"converting-problem" gelöst nur schaffe ich es einfach nicht zu 
verstehen wie das funktioniert...
Könnte mir einer der klugen Köpfe da draussen vielleicht erklären 
wieso/wie diese funktion funktioniert bzw. warum sie so aussieht?

LG Son of Oden

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was soll die Funktion eigentlich bewirken, bzw. wozu braucht man die 
Summe aller Zeichen eines Strings?

MfG Spess

Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Steht doch auf der Homepage.
Die funktion gibt einen string asu der das ASCII equivalent des 
Eingegebenen string ist... nur habe ich nicht ganz verstanden wie dsa 
gemacht wird.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. Oden schrieb:
> http://www.dotnetspider.com/resources/18881-How-Co...
>
> Das habe ich im Internet gefunden und damit ist auch mein
> "converting-problem" gelöst

Welches 'converting-problem'?


So wie ich das sehe, errechnet die Funktion sowas wie eine 'Quersumme' 
über alle Character im Originalstring.
Von dieser Summe wird dann eine Textrepräsentierung gebildet und 
zurückgegeben.

Die Funktion ist sowas wie ein Textanalogon zur mathematischen Quersumme 
von Zahlen. Aus 15 wird so 6 (weil 1 + 5 gleich 6 ist)

Im Moment ist der einzige Anwendungsfall, der mir für sowas einfällt ein 
(eher schlechter) Hash-Code. Nur wozu man dann das Ergebnis als String 
haben möchte ist mir dann wieder rätselhaft.

Interessieren würde mich, welches converting-problem du damit gelöst 
haben willst. So wie ich das sehe, kann man mit der Funktion eigentlich 
nichts wirklich Sinnvolles anfangen. Aber ich lass mich gern eines 
besseren belehren.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Die funktion gibt einen string asu der das ASCII equivalent des
>Eingegebenen string ist... nur habe ich nicht ganz verstanden wie dsa
>gemacht wird.

Ein String besteht aus ASCII-Zeichen! Die Funktion summiert die 
ASCII-Werte der Zeichen und macht daraus wieder einen String.

Was vestehst unter 'ASCII equivalent'?

MfG Spess

P.S. Die Zeilen:
            char c;
            c = input[i];

sind sinnlos.

Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Ich muss mit einem µC komunizieren und ihm befehle senden. diese befehle 
müssen aber in ASCII sein und ich möchte deshalb einen String in ASCII 
umwandeln. Gibt es sonst noch eine bessere Methode?

LG Son of Oden

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ich muss mit einem µC komunizieren und ihm befehle senden. diese befehle
>müssen aber in ASCII sein und ich möchte deshalb einen String in ASCII
>umwandeln. Gibt es sonst noch eine bessere Methode?

Ein String besteht aus ASCII-Zeichen!!! Das was die Funktion erzeugt, 
hat mit dem String nichts mehr zu tun.

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
>>Ich muss mit einem µC komunizieren und ihm befehle senden. diese befehle
>>müssen aber in ASCII sein und ich möchte deshalb einen String in ASCII
>>umwandeln. Gibt es sonst noch eine bessere Methode?
>
> Ein String besteht aus ASCII-Zeichen!!!

Na ja, nicht notwendigerweise.
Es könnten in C# auch Unicode Zeichen sein.

Allerdings ist mir nicht klar, was die Funktion da bewirken könnte.

> Das was die Funktion erzeugt, hat mit dem String nichts mehr zu tun.

Ganz genau. Das wär sonst eine prima Kompressionsmethode: Einen String 
in einen int aufzusummieren und daraus dann wieder den kompletten String 
zu rekonstruieren (wenn auch in ASCII).
Die komplette Bibel in nur sizeof(int) Bytes. Herz was willst du mehr?

@R. Oden

Könntest du mal zeigen, welchen String du in die Funktion hineinsteckst 
und welcher String von der Funktion geliefert wird.

Irgendwie hab ich das Gefühl, du hast das ganze noch gar nicht getestet 
sondern klammerst dich am Funktionsnamen fest.

Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhh ich werde mal rücksprache mit meinem Kollegen halten(er programmiert 
den µC) ich melde mich dann wenn ich mehr weiss.

LG Son of Oden

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>> Ein String besteht aus ASCII-Zeichen!!!
>Es könnten in C# auch Unicode Zeichen sein.

Weiss ich. Wollte nur nicht noch mehr Verwirrung stiften.

@sonofoden

Im Normalfall sollte sollte es ausreichen wenn du folgendes machst:

for (i = 0; i < input.Length; i++)
 {  c = input[i];
    Sende(c)              //deine Ausgaberoutine
 }

Jedenfalls son in der Art (Sorry,habe noch nie mit C programmiert).

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
>>> Ein String besteht aus ASCII-Zeichen!!!
>>Es könnten in C# auch Unicode Zeichen sein.
>
> Weiss ich. Wollte nur nicht noch mehr Verwirrung stiften.

Dachte ich mir schon :-)

Als ich die Originalfragstellung und etwas von 'convertier-problem' las, 
war mein erster Gedanke eine Unicode zu ASCII Konversion, die man 
zweifellos gegebenenfalls machen müsste.

Ich glaube immer noch, dass es genau das ist, was der TO eigentlich 
sucht. Allerdings ist er auf eine unverschämt vage Funktionsbeschreibung 
(was ist der ASCII Wert eines Strings?) und einen (denke ich mal) mehr 
als schlecht gewählten Funktionsnamen hereingefallen. Zumindest hat mir 
das meine Glaskugel geflüstert :-)

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. Oden schrieb:
> Hi,
> Ich muss mit einem µC komunizieren und ihm befehle senden. diese befehle
> müssen aber in ASCII sein und ich möchte deshalb einen String in ASCII
> umwandeln. Gibt es sonst noch eine bessere Methode?
>
> LG Son of Oden

Die Klasse SerialPort, die hier wohl verwendet wird, hat genau für 
diesen Zweck eine Eigenschaft namens Encoding.
Das Encoding legt fest wie Zeichen vor dem Senden bzw. nach dem 
Empfangen umgewandelt werden (in UTF-16, das intern für Strings 
verwendet wird). Die Default-Einstellung ist ASCIIEncoding d.h. alles 
was größer als 127 (ASCII) ist, wird in 63 ('?') umgewandelt.
Braucht man alle Werte von 0-255 kann z.B. "Western European (ISO)" (ISO 
8859-1) oder "Windows-1252" verwendet werden.
Reicht das nicht, sendet und ließt man mit den normalen Funktionen 
direkt Bytes.

Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hat sich erledigt. Ich werd die Funktion sicherlich nicht 
brauchen...trotzdem danke für die Hilfe.

Autor: R. Oden (sonofoden)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Hat sich doch nicht erledigt.
Langsam bin ich verwirrt. Wie genau funktioniert das mit dem encoding?

Also ich sende einem µC das Signal "Z1", "Z2", "Z3" oder "Z4".
Dananch sendet der µC das dementschrechende Signal als Antwort z.B.:" 
Z1+568"
das heisst "zone1" + ein Wert von 0-1024.

So ich verarbeite diese Antwort jetzt folgendermaßen: ich schaue nach 
welche Zone und nehme dann den Angehängten wert und speichere ihn in 
einer Variable ab.

Das ist die Komunikation die aufgebaut werden muss. Ist das auf diese 
Weise möglich (einfach einen string zu senden  und die antwort als 
string zu bekommen) wenn ich encoding=ASCII eingestellt habe? oder muss 
ich da als Zwischenschritt irgendwo noch etwas convertieren?

Danke für die Hilfe bis jetzt ihr seid die besten..gg

LG Son of Oden

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R. Oden schrieb:
> oder muss
> ich da als Zwischenschritt irgendwo noch etwas convertieren?

Nein.

Autor: Thomas L. (somnatic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jep, das ist möglich
  SerialPort sp = new SerialPort();
  sp.Encoding = Encoding.ASCII;
  sp.Write("Blaaaaa");
  string output = sp.ReadLine();

Natürlich musst du auch noch sagen welchen Port du verwenden willst usw.
Bei einem Senden wird jedoch der String automatisch in ASCII umkodiert, 
beim Empfangen dann wieder automatisch nach Unicode.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.