Mehrere einzelne Hex-Werte zu einem ganzen

Status
Nicht offen für weitere Antworten.
P

punky_A

ich hab vier vershiedene werte 0x08 0x0a 0x02 0x0f

ich bauch den aber als einen also wie folgt 0x080a020f

also nicht zusammenrechenen sondern daraus einen machen
 
Hoi punky_A,

Binäre Operatoren sind das Stichwort!
Code:
unsigned int uiRes = (0x8 << 24) | (0xA << 16) | (0x2 << 8) | 0xF;

Gruss
Cromon
 
Bitte gib mehr Infos.

Sind das Strings? oder irgenein anders Format?

So wie ich das interpretiere musst du die einzelnen Farbwerte nur um das 0x erleichtern und dann an einander appenden. dann noch ein 0x vor den neuen string und gut. aus String dürfte man ja auch in C++ int generieren können.
 
danke für die schnelle hilfe

in uiRes wird also der erste wert um 24 nach links verschoben ? danach um 16 danach um 8 und am schluss um 0 ?

wert uiRES hat also:
DWORD wert1 byte 0
DWORD wert2 byte 16
DWORD wert3 byte 24
DOWRD wert4 byte 32
?

so inetwa?

will verstehen was das genau macht, allerdings gehen mir ein paar bits verloren wie kann ich die restbits auf null setzen?
weil die bit anzahl dann schwindet, den rest auffüllen

@Avorin;
na es geht nicht um farben hab ich nur zur unterscheideung als einzelne hex werte gefärbt, formatierung im beitrag ;)
 
Wir stellen uns ja 0x8 folgendermassen vor:
0000 0000 0000 0000 0000 0000 0000 1000

Nun verschieben wir das um 24 bits
0000 1000 0000 0000 0000 0000 0000 0000

0xA sieht so aus:
0000 0000 0000 0000 0000 0000 0000 1010

Nun verschieben wir um 16 bits:
0000 0000 0000 1010 0000 0000 0000 0000

Nun rechnen wir das OR:
0000 1000 0000 0000 0000 0000 0000 0000
0000 0000 0000 1010 0000 0000 0000 0000
----------------------------------------------------------------------
0000 1000 0000 1010 0000 0000 0000 0000

Wenn wir das scharf anschauen sehen wir:
0x080A0000

Dasselbe machen wir mit den restlichen zwei Zahlen.
 
also wenn ich das als timpestamp umrechnen gibts nne überlauf oder unterlauf keine ahnung also müssen irgendwelche bits verloren gehen
kann das sein
mytime=uiRes;
mytm=localtime(&mytime);
strftime(timestamp,sizeof timestamp,"%a, %d %b %Y %H:%M:%S %z",mytm);
printf("%s\n",timestamp); <-- erigibt ne zugriffsverletzung

vielen dank für die erklärung..

also wert :
005A0400 wird zb: 5A0400 und nicht 005A0400
 
Hi.

@punky_A: poste am besten ein komplettes, kompilierbares Minimal-Beispiel. Und erläutere mal überhaupt was das ganze soll, warum du die Werte so zusammenrechnen willst.

Einen time_t in irgend einer Form zu manipulieren ist keine gute Idee. Es ist nicht spezifiziert wie dieser Typ implementiert ist. Er kann auch durch einen float repräsentiert werden.

Gruß

punky_A hat gesagt.:
also wert :
005A0400 wird zb: 5A0400 und nicht 005A0400
... was absolut das gleiche ist.
 
auch an der anzahl der bits?
ich stell mir vor dass einfach die erste 8bits verloren gehen
00000 01010 01001 00110 <> 01010 01001 00110
die grösse der structur kann dann nicht stimme die übergeben wird?
ich will eigentlich wissen ob ein wert die high and low bits nicht setzt
ich bin da nicht so gebildet was das bit zeugs angeht erst am lernen wenn man es so nennen will
sonst könnt ich ja in ner binary alle 00 rausnehmen wenns dasselbe währ

und 0B01070A ergibt B01070A weil 0b 01 07 0a <> b0 10 70 a
 
Zuletzt bearbeitet von einem Moderator:
tja und wieso ist dann:
0B01070A ergibt B01070A weil 0b 01 07 0a <> b0 10 70
also 0B01070A ist doch ein anderer wert als B01070A
 
Status
Nicht offen für weitere Antworten.
Zurück