Berechnen einer Word-Variablen aus ihren 2 Bits

#6184425
Lesenswert?

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
Gast #6184433
Lesenswert?

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.
#6184578
Lesenswert?

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
#6184593
Lesenswert?

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
#6184601
Lesenswert?

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
#6184610
Lesenswert?

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.
Gast #6184615
Lesenswert?

@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
Gast #6185507
Lesenswert?

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  :)

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