mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik byte-verfälschung


Autor: Mark Tensen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich benötige wieder mal eure Hilfe!

Ich schicken mit einem c-programmcode 4 bytes über die 
RS232-Schnittstelle.
Hier ein Teil meines Codes:

FILE* Fd;
system("mode COM1: baud=19200 parity=n data=8 stop=1");
Fd = fopen("COM1:","w+");
fprintf(Fd,"%X%X%X%X",3,0,1,2);
fclose(Fd);

ich sende also 1. byte : 0x3, 2. byte : 0x0, 3. byte : 0x1, 4. byte : 
0x2

Wenn ich diese Bites dan am anderen Ende auslese erhalte ich die Bytes:
1. byte : 0x33, 2. byte : 0x30, 3. byte : 0x31, 4. byte : 0x32!

Kann mir das jemand weiterhelfen??

Gruss

Mark

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Tensen schrieb:

> ich sende also 1. byte : 0x3, 2. byte : 0x0, 3. byte : 0x1, 4. byte :
> 0x2

nö, tust du nicht. Überleg doch mal, was das fprintf macht...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na was rauskommt ist der hexwert von ASCII 3,0,1,2

0x33 = '3'
0x30 = '0'
0x31 = '1'
0x32 = '2'

probier mal fprintf(Fd,"%X%X%X%X",0x3,0x0,0x1,0x2);

K.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du wandelst die Zahlen in ihre (hexadezimale) ASCII-Repraesentation um. 
Lies mal nach, was printf tut.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird es damit klarer? :-)

-x-x-x-x- snip -x-x-x-x-
$ cat a.c
#include <stdio.h>

main()
{ printf("%2.2X %2X %2X %2X\n",3,0,1,2); }


$ ./a.out
03  0  1  2
-x-x-x-x-x-x-x-x-x-x-x-

-Hans

Autor: Mark Tensen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich fange an mehr zu verstehen aer funktionieren tut es immer no nicht! 
bin halt noch ein anfänger!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%X wandelt in lesbare Darstellung - das, was Du siehst.  Nimm %c.

Autor: Mark Tensen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
herzlichen Dank an alles! Es funktioniert nun. %c war die richtige 
Antwort!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was soll dieser unsinn?
> system("mode COM1: baud=19200 parity=n data=8 stop=1");
man man schon in C Programmiert sollte man auch die funktionen verwenden 
um die schnittstelle umzukonfigurieren.

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.