2 Byte in einen wert in Codevision

Gast #165534
Lesenswert?
• ▲
▼
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.
Gast #165536
Lesenswert?
• ▲
▼
@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 ....
Gast #165537
Lesenswert?
• ▲
▼
> 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?
Gast #165539
Lesenswert?
• ▲
▼
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
Gast #165541
Lesenswert?
• ▲
▼
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
Gast #165542
Lesenswert?
• ▲
▼
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.
Gast #165543
Lesenswert?
• ▲
▼
@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
Gast #165544
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #165549
Lesenswert?
• ▲
▼
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.
Gast #165552
Lesenswert?
• ▲
▼
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
Gast #165554
Lesenswert?
• ▲
▼
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 ( &, |, ˆ, <<, >> ).
Angehängte Dateien:
Persönliche Seite #165555
Lesenswert?
• ▲
▼
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.
Gast #165556
Lesenswert?
• ▲
▼
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.
Gast #165557
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren