Hallo Leute, vielleicht etwas komisch formuliert, aber ich kann es nicht
besser:
Ich habe die 2 Bits einer Wordvariable, ausgelesen aus einer Log-Datei.
Ich habe jetzt also zwei Hex-Variablen, wie mache ich aus diesen beiden
eine Word-Variable? Danke
Thema:
Word-Variable in Byte verwandeln:
Beitrag "word -> 2 bytes"
word w;
byte blow,bhigh;
bl = w & 0xFF;
bh = w >> 8;
Re: uint16 zu uint8 und zurück
Autor: Laszlo H. (laszlo_h)
Datum: 02.06.2011 18:48
Simon schrieb:
> // Von zwei byte auf 1 word
> word = 1byte << 8;
> word |= 2byte
Als Einzeiler:
word = (1byte << 8) | 2byte;
Danke, jetzt brauch ich nur noch den Weg wieder zurück
Also vom Word wieder in zwei bytes aufteilen
Re: uint16 zu uint8 und zurück
Autor: DirkB (Gast)
Datum: 02.06.2011 19:16
1byte = word >> 8; // 1 Byte ist das höherwertige Byte
2byte = word & 0xff; // 2 Byte ist das niederwertige
2B 0F
Sind zwei 16Bit Hexdezimal Ziffern.
0-9 A-F Hexdezimal.
A=10 bis F=14
Links ist immer *8 rechts ist immer *1
2B
2*8+1*11=27
0F
0*8+1*14 =14
Du kannst aus beiden Ziffern nicht eine machen. Beide sind getrennt.
Nach ASCII Zeichensatz ist 2B ein + und 0F Enter/Eingabe.
Max schrieb:> und ich kann kein Wort C..
Dann bist du der falsche Reiter auf dem falschen Pferd.
Klarer:
Ihr beiden werdet vermutlich nicht da ankommen, wo du hin willst.
Max schrieb:> Ich habe die 2 Bits einer Wordvariable, ausgelesen aus einer Log-Datei.> Ich habe jetzt also zwei Hex-Variablen, wie mache ich aus diesen beiden> eine Word-Variable? Danke
Da du in keinster Weise schreibst in welcher Programmiersprache und von
was die 2 Zahlen sind, schütte sie in ein Glas und rühre um.
Eine Zahl ist das Hi-Byte das andere das Lo-Byte, aber wenn du schon
nicht weisst in welcher Reihenfolge das vorliegt.. der Bäcker backt
Brötchen
Max schrieb:> Wie kann> man daraus eine Zahl bilden?
Mit dem Windows-Taschenrechner (Programmierer-Modus).
Mit einfachen Multiplikationen.
Mit einem selbst geschriebenen Programm.
Mit Excel.
Mit ...
Stefan ⛄ F. schrieb:> Wenn du ein C Programm ändern willst, musst du C lernen.
Wo steht denn, das der TO ein C-Programm ändern will.
Soweit ich es verstanden habe, soll aus zwei Byte einer Log-Datei, die
ein Word repräsentieren, der Wert dieses Word berechnet werden.
@Max: Falls das so nicht stimmt, bitte korrigieren. Für die Zukunft:
Versuche Dein Problem möglichst so zu beschreiben, dass ein vollkommen
Unbedarfter Dir sinnvoll antworten kann.
Ich versuche mich mal an einer Lösung:
Gegeben: zwei Zahlen in Hex-Darstellung:
Z1: ab (z.B. 2A)
Z2: cd (z.B. 0F)
Zunächst wandelt man die beiden Zahlen mal in Dezimalzahlen um. Dazu
muss Du noch wissen, das die Ziffern A bis F den Wert 10 (A) bis 15 (F)
haben. Zu Not einfach mal mal im Lexikon Deiner Wahl nachschauen
("hexadezimal" als Suchwort sollte helfen). Dann ermitteln wir den
Dezimalwert der beiden Zahlen:
Z1= (a * 16) + b (Beispiel: 2*16 + 10 = 42)
Z2= (c * 16) + d (Beispiel: 0*16 + 15 = 15)
Jetzt kommt es darauf an, welche der Beiden Zahlen der höherwertige Teil
Deiner gesuchten Word-Variablen ist (nennt sich auch High-Byte). Das
hängt von der Ablage-Art des erzeugenden Programms ab, welche die
Log-Datei erzeugt hat. Es gibt da zwei Möglichkeiten:
a) Z1 ist High-Byte
oder
b) Z2 ist High-Byte
Allgemein muss man rechnen:
High-Byte * 256 + Low-Byte ergibt den gesuchten Wert.
Bei menem Beispiel:
a) Wert = (42 * 256) + 15 = 10767
b) Wert = (15 * 256) + 42 = 3882
Jetzt sollte hoffentlich alles klar sein.
Und an alle anderen Helferlein:
Wenn ihr nicht helfen wollt, lasst doch das rumätzen. Schubsen in die
richtige Richtung ist ja OK. Aber es ist doch klar zu erkennen gewesen,
dass der TO ein blutiger Anfänger ist. Also an die Hand nehmen oder
Finger ewg von der Tastatur!!
Grüße
Hoschti
Stefan ⛄ F. schrieb:> Hotschi hat soeben mein Helfersyndrom übernommen. Ich fühle mich> erleichtert.
:-D
Aber ich finde irgendwie viel zu kompliziert...
Max schrieb:> Ich habe jetzt also zwei Hex-Variablen, wie mache ich aus diesen beiden> eine Word-Variable?
Falls ein 16Bit Wert als 2 einzelne Bytes in der Log stehen,
also deine 0x2B und 0x0F, dann musst du nur wissen welche Logik
beim schreiben der Log verwendet wurde:
- Big-Endian oder
- Little-Endian
Dann ist es entweder:
0x2B0F = 11023
oder
0x0F2B = 3883
Vieleicht stellt ihr erst mal die richtigen Fragen
Max schrieb:> ausgelesen aus einer Log-Datei
1. Womit ausgelesen
Max schrieb:> Ich habe jetzt also zwei Hex-Variablen
2. In welcher Form?
2.1 Als String "2B" und "0F"
2.2 oder als Byte Wert in denen als Hex ausgedrückt 2B und 0F steht
Max schrieb:> wie mache ich aus diesen beiden eine Word-Variable?
3. Mit welchem Hilfsmittel? Einem Editor, einer Programmiersprache, ...?
4. Wie wurden diese Werte in die Log Datei geschrieben, wie die
Vorposter schon gesagt haben gibt es System, die bei dem Wert 0x1234
schreiben "12" "34" und andere die schreiben "34" "12". Das musst du
wissen.
@Hoschti
Ich bin zwar nur ein harmloser Passant, aber: Applaus für Deinen
Beitrag.
Der ist richtig gut, verständlich und hilfreich. Da kann sich manch
ein Selbstdarsteller eine Anregung holen.
+10
urschmitt du stellst aber nicht die richtigen Fragen. Oder wie soll
deine Fragw womit ich ausgelesen habe, irgendwas mit dem Umrechnen zu
tun haben?
also spiele dich nicht so auf. Danke
adamp und hotschi, ich danke euch :) Mit euren Ideen kann ich etwas
anfangen :)