# Binärwerte in Variablen



## borp (2. Juni 2010)

meine frage ist wenn ich aus einem register einen 8bit Wert zb: 1000 0000b in eine Variable speichere und anschließend einen 2ten 
8bit wert zb: 1010 1100b in eine Variable speichere steht dann in der Variable 1010 1100 1000 0000 in meiner Variable


----------



## badday (2. Juni 2010)

Das kommt auf den Typ deiner Variable an. Das könnte dich wohl interessieren: http://www.cplusplus.com/reference/stl/bitset/

Gruß,

badday


----------



## borp (2. Juni 2010)

ich möchte diese binärwerte in eine short varibable speichern


----------



## borp (2. Juni 2010)

Wie schaffe ich es, dass ich eine 8bit Zahl zb: 1110 1001 und eine 2te 8bit zahl zb: 1000 0000 in eine 
short variable zu schreiben so, dass die 2 8bit zahlen hintereinander stehen also 1110 1001 1000 0000

bitte um lösungsvorschäge 

zurzeit lautet mein versuch wie folgt: 

tmp_msb = Inp32(0x50);           //read high byte CPUtemperature
tmp_lsb = Inp32(0x51);            //read low byte CPUtemperature 

tmp_hlf.Format("%i%i",tmp_msb,tmp_lsb);              //add low byte to high byte 
hlf = atoi(tmp_hlf);	
tmp_cpu = hlf >> 7;            //eleminate bits 6-0 from lowbyte


----------



## brunlorenz (2. Juni 2010)

Kannst du bitte richtig schreiben ?
Druchgehend kleingeschriebene Beiträge sind laut Netiquette unerwünscht! Bitte melde dich auch an 
Nun zu deinem Problem:

```
char temp[1000];
sprintf(temp,"%d%d",deinevar1,deinevar2);
sscanf(temp,"%d",&deinresultat);
```
Das wäre meine Lösung 
Wenn mein Beitrag geholfen hat, klicke bitte auf den Danke-Button 
PS: Ist in C geschrieben, also kann es sein, dass er es nur so aktzeptiert:

```
extern "C" {
char temp[1000];
sprintf(temp,"%d%d",deinevar1,deinevar2);
sscanf(temp,"%d",&deinresultat);
}
```
Lorenz


----------



## orpb (2. Juni 2010)

*Variablen in die Binärzahlen geschrieben werden*

ich würde gerne wissen was passiert wenn ich aus einem register einen 8bit wert zb: 1100 1001b
in eine int variable var1 und in eine andere int variabel var2 einen 2ten 8bit wert zb: 1000 0000b einfügen und diese dann mit der folgenden Fkt.
verknüpfe:

CString tmp_hlf;
 tmp_hlf.Format("%i%i",tmp_msb,tmp_lsb);

steht nun in dem CString tmp_hlf: 1100 1001 1000 0000  also die binärzahlen zusammengefügt oder steht 201128d also die Dezimalzahlen 
das ist für mich wichtig weil ich anschließend den String in eine int Variable zurückwandle und dann um 7 stellen nach rechs schieben möchte 
dass theoretisch 1100 1001 1 in der neuen int variable steht


----------



## brunlorenz (2. Juni 2010)

Kannst du dich bitte verständlich ausdrücken
So kann ich dir keine Antwort geben


----------



## orpb (2. Juni 2010)

Ich möchte zwei Integer Variablen zusammenfügen
In die erste Integer-Variable lese ich aus einem Register 1100 1001b ein.
In die zweite Integer-Variable lese ich aus einem anderen Register 1000 0000b ein.

Nun ist mein Problem dass ich die beiden Integer-Variablen zusammenfügen möchte sodass 
in einer dritten Integer-Variable 1100 1001 1000 0000b steht. In meinem vorigem Beitrag wollte ich wissen
ob die flogende Funktion das macht und wenn nicht wie es gehen könnte 
danke 

tmp_msb = Inp32(0x50); //read high byte CPUtemperature	1100 1001	
	tmp_lsb = Inp32(0x51); //read low byte CPUtemperature	1000 0000	

	tmp_hlf.Format("%i%i",tmp_msb,tmp_lsb); //add low byte to high byte 2011	ist 2011 soll 51456
	hlf = atoi(tmp_hlf);


----------



## ComFreek (2. Juni 2010)

Ich glaube, er will wissen, ob die Binärzahlen automatisch in Dezimalzahlen umgewandelt werden, ungefähr so:

```
int bin = 1100011b;  // Ist 99

cout << bin;  // Kommt 99 oder 1100011?
```

@orpb: Schau dir mal das an: http://www.tutorials.de/forum/c-c/25291-c-integer-zahl-binaere-zahl-umwandeln.html


----------



## orpb (2. Juni 2010)

Es geht eigentlich nicht darum ob ich 3 oder 0011b bekomme das ist ja nur eine Darstellungsfrage.
Meine Frage ist wenn ich die Variablen zusammenfüge ob die Binärwerte der Integer Variablen zusammengefügt werden oder 
die Dezimalwerte


----------



## timestamp (2. Juni 2010)

orpb hat gesagt.:


> Es geht eigentlich nicht darum ob ich 3 oder 0011b bekomme das ist ja nur eine Darstellungsfrage.
> Meine Frage ist wenn ich die Variablen zusammenfüge ob die Binärwerte der Integer Variablen zusammengefügt werden oder
> die Dezimalwerte



Probier es doch einfach aus?


----------



## brunlorenz (2. Juni 2010)

Wenn du sie addierst, werden Dezimalen zusammengezählt.
Das heisst, 1+1 =2 
Für Binärwerte müsstest du eine eigene Funktion schreiben.


----------



## orpb (2. Juni 2010)

Ich möchte die Variablen nicht  zusamenzählen sondern zusammenfügen sodass die Inhalt der Variablen hintereinander stehen
dadurch meine Frage ob die Binärwerte oder die Dezimalwerte beim Zusammenfügen verwendet werden


----------



## deepthroat (2. Juni 2010)

Hi.





orpb hat gesagt.:


> Ich möchte die Variablen nicht  zusamenzählen sondern zusammenfügen sodass die Inhalt der Variablen hintereinander stehen
> dadurch meine Frage ob die Binärwerte oder die Dezimalwerte beim Zusammenfügen verwendet werden


Der Formatstring %i gibt Integerwerte in Dezimalschreibweise aus.

```
unsigned int octet1 = 0x3f;
unsigned int octet2 = 0x74;

unsigned int res = octet1 * 256 + octet2; // ergbit 0x3f74
```
Das gleiche ließe sich mit Bitmanipulationsoperationen verwirklichen.

Gruß


----------



## Pain-maker (2. Juni 2010)

Ich glaube du suchst sowas:


```
short test1 = ((0xAC << 8) | 0x80)
```

dann hast du hexadezimal:0xAC 0x80
und binär gesehen: 1010 1100 1000 0000

Das vordere Bit (big-endian) wird einfach 8 bit nach links geschoben.
Folglich gilt für ein integer:


```
int test2 = ((0x10 << 24) | (0x4C << 16) | (0xAC << 8) | 0x80)
```

um hexadezimal:0x10 0x4C 0xAC 0x80
und binär: 00010000 01001100 10101100 10000000
zu erhalten.

Hoffe das hat dir geholfen.

_Aber Achtung:
Je nach Prozessor bzw. Betriebssystem, ist die Speicherweise big/middle/little-endian und die Reihenfolge beim shiften kann variieren._

Mfg Pain-maker


----------

