Hallo Leute Ich habe eine frage ich bekomme daten zu meinen Controller gesendet zbs. HEX: 0x01 u. 0x10 nun möchte ich diese 2 Byte in 1 Wert bekommen wie mache ich das im Codevision.? Den ich muss aus den 2 Byte eine Zahl machen um sie dann zurechnen. MFG: Fichte
Wieso schreibst du nicht dazu, dass es um einen C-Compiler geht? Sowas ist nämlich Standard-C und unabhängig vom Compiler: uint16_t umgewandelter_wert = low_byte | ((uint16_t)high_byte << 8);
Ja ganz einfach, weil es diese Befehle nicht in Codevision gibt.! MFG: Fichte
Diesen uint16_t umgewandelter_wert = low_byte | ((uint16_t)high_byte << 8); bzw. nichts in dieser Art. MFG: Fichte
Welchen Informationsgewinn habe ich von deinem letzten Posting? (0.0%) Codevision ist doch ein C-Compiler, richtig? Dann kann er auf jeden Fall den bitshift (<<) und das binäre oder (|). Das einzige, was er also evtl. nicht kennt ist uint16_t. Falls das der Fall ist, musst du natürlich uint16_t durch den passenden 16-Bit-Typ austauschen. Aber ich nahm an, diese kleine Transferleistung könntest du selbst erbringen.
Das mit der Bitschieberrei ist ja schön und gut und das kann auch Codevision ((<<) u. (|)) nur leider komme ich damit nicht zurecht. Sorry muss man den alles können.? MFG: Fichte
@fichte womit kommst du denn nun genau nicht zurecht? was Bitschieben bedeutet, bzw. eine Oder-Vernüpfung; oder wie man das anwendet oder was sonst noch? LAss dir doch nicht jeden Popel aus der Nase ziehen, das macht doch keinen Spass in deienr Nase rumzustochern ....
> Sorry muss man den alles können.?
Nein, bis auf eine Sache: Präzise Fragen stellen.
Oben hast du geschrieben, dass Codevision keinen bitshift beherrschen
würde. Jetzt schreibst du auf einmal, dass Codevision es doch kann, du
aber nicht damit zurechtkommst. Du wirst mir bestimmt zustimmen, dass
du bisher nicht "präzise" genug für eine gute Antwort warst.
Bitshifts und binäres Oder sind die gängigen Mittel für so ein Problem.
Du solltest dir also ein C-Buch deines geringsten Misstrauens holen und
das Kapitel über Bit-Operatoren lesen. Es gibt durchaus auch andere
Methoden, auch ohne Bit-Operatoren:
uint16_t umgewandelt = lowbyte + highbyte * 256;
Nur verstehst du diese Zeile wirklich besser?
Bit-Operatoren sind nicht schwer, man muss sie nur einmal verstanden
haben. Außerdem, wie setzt du denn einzelne Flags in einem Register,
wenn nicht mit Bit-Operatoren?
Nachtrag: Nur um zu zeigen, was ohne Bitoperatoren passieren kann: http://thedailywtf.com/forums/33564/ShowPost.aspx
Okay Okay Ich komme damit nicht zurecht das ich über die USART HEX Zahlen bekomme die ich rechnen muss das ist alles Okay weil pro HEX Zahl immer ein wert. Aber das Problem ist ich bekomme 1 Zahl in 2 HEX Zahlen also muss ich 2 HEX Zahlen in eine Umwandeln bzw. muss aus jeweils 2 einzelnen HEX Zahlen 1 machen wie zbs. HEX: 0x01 u. 0x10 Ich brauche aber 0x0110 als ganze Zahl. Das heisst ich muss beide zusammen fassen aber wie. Und damit komme ich nicht zurecht.! MFG: Fichte
Bekommst du Hex-Zahlen in Form von ASCII-Zeichen, also einen String? Langsam bin ich es echt leid, das alles aus dir herauszukitzeln.
So um euch das mal zuzeigen was ich von dem Steuergerät bekomme. http://www.efichte.de/hex.htm So also ich bekomme nur die werte gesendet und nichts weiter ich muss sie mir in einen Decimalwert Wandeln bzw. um damit zurechnen also Zahlen von 0-255. Da aber einige Zahlen über die 255 gehen sendet mir das Steuerteil 2 HEX Werte um auf eine grössere Zahl zukommen. MFG: Fichte
Das Steuerteil sendet dir bestimmt keine Hex-Werte. Du siehst Hex-Werte, weil du dir die Daten in einem _Hex_-Editor ansiehst. Klingt doch logisch, oder? Du empfängst (wie du schon geschrieben hast?) einfach Zahlen von 0-255, sprich: Bytes. Mit diesen Bytes kannst du nun genau das machen, was ich schon oben versucht habe zu erklären, nämlich zwei Stück in einen uint16_t umwandeln.
@Chris Ich habs verstanden. Wunder dauern eben etwas Länger habs dann so Gelöst. unsigned long wert1, wert2; wert1= getchar(); //High Byte Lesen wert2= getchar(); //Low Byte Lesen Ergebnis = wert1<<8 | wert2; //High Byte 8 nacht links verschieben Ich danke euch für die Hilfe.!!! MFG: Fichte
Hallo, ich habe ein Grooßes Problem, ich habe schön ein Programm,der Entropie berechnet. Jetzt habe ich diese Aufgabe. Schreiben Sie Ihr Programm zur Entropieberechnung aus Aufgabe 3 von U¨ bungsblatt 3 um, so dass es die Entropie der Dateien auf der Basis von 4 bitWerten berechnet anstelle von 8 bitWerten. Behandeln Sie dabei ein 8 bit ASCII Zeichen als zwei 4 bit Zeichen. Benutzen Sie f¨ur die Zerlegung der eingelesenen 8 bit Zeichen in 2 4 bit Zeichen lediglich Operatoren aus der Gruppe der Bit-Operatoren ( &, |, , <<, >> ). Ich habe mir gedacht,ich schreibe das so wie es in Dateianhang vorhanden ist,aber es gibt riesige Probleme.Bitte HILFFFFFFFFFFFEEEEEEEEEE
"Die Entropie muss man nicht berechnen, sie nimmt sowieso zu." so wie der Umfang von meinem Bauch ???? FG
Habe gefragt wie man ein 8 bit ASCII CODE mit Hilfe von BITOPERATOREN in form 2 4 bit schreiben. Weiss jemand,wie es möglich ist?
Auch wenn du dich an ein anderes Topic anhängst... Das geht mit maskieren (per logisch UND & ) und Bitshiften.Einfach die Bits die du brauchst maskieren.Und bei den höherwertigen 4 Bit musst du selbige natürlich noch nach rechts schieben.
Indem du dich in einem C Buch deines Vetrauens über die Funktionsweise der bitweisen operatoren (&,|,>>,<<) schlau machst und danach versuchst aus (>>,&) das gewünschte zu erreichen.
Hi Ronny, ich habe es so geschrieben: //Mit diese Funktion versuchen wir ein 8 bit code in 2 4 bit zu schreiben double seperate_counts(unsigned long *counts) { int i; unsigned long *counts1,*counts2,*temp; for ( i = 0; i < 256; i++ ) { temp[i]=counts[i]; //save counts[i] in temprory file(damit man das nicht verliert counts1[i]=(counts[i]&11110000); //bitmask=11110000 um nur vier erste bits gleiche Werte haben und alles anders Null wird counts1[i]>>=4; //4 bit nach Rechts schieben counts2[i]=(temp[i]&0x0011111); //bitmask=00001111 um nur zwite 4 bit erhalten bleiten } } Aber Leider taucht ein RUNTIME error auf. Bis jetzt vielen Dank für deine Hilfe. Azar
Hi Ronny, Ich habe dir ganze progame geschickt. Das ist meine Aufgabe: Schreiben Sie Ihr Programm zur Entropieberechnung aus Aufgabe 3 von U¨ bungsblatt 3 um, so dass es die Entropie der Dateien auf der Basis von 4 bitWerten berechnet anstelle von 8 bitWerten. Behandeln Sie dabei ein 8 bit ASCII Zeichen als zwei 4 bit Zeichen. Benutzen Sie f¨ur die Zerlegung der eingelesenen 8 bit Zeichen in 2 4 bit Zeichen lediglich Operatoren aus der Gruppe der Bit-Operatoren ( &, |, , <<, >> ).
Bereits der Aufruf von read_counts() geht in die Hose; übergeben wird als zweiter Parameter ein Array mit 16 Elementen, die Funktion aber beschreibt eines mit 256 Elementen. seperate_counts wiederum schlägt aus den von Ronny angesprochenen Gründen fehl. Statt counts1 und counts2 lokal zu deklarieren, sollten diese als Pointer an die Funktion übergeben werden, und temp sollte als Array und nicht als ein ins Leere verweisender Pointer deklariert werden. Du solltest dringendst mehr über das Programmieren in C lernen. Literaturhinweis: Kernighan & Ritchie, Programmieren in C, Hanser Verlag, zweite Auflage Nein, mit C++ hat das alles nichts zu tun.
ZITAT: Bereits der Aufruf von read_counts() geht in die Hose; übergeben wird als zweiter Parameter ein Array mit 16 Elementen, die Funktion aber beschreibt eines mit 256 Elementen. Das wird nur verursachen,dass viele schon vorher definierte Arrayelemente im Speicher leer bleiben.
Man kann sehrwohl ein Array der Grösse 256 mit 16 Werten beschreiben,das man aber nicht 256 Werte in eines der Grösse 16 quetschen kann sollte eigentlich auch ohne C Kenntnisse ersichtlich sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.