& ist diesem Fall eine bit-weise Und-Verknüpfung. Damit wird das niederwertige Halb-Byte maskiert, d.h. alle anderen Bits außer 1111 werden auf Null gesetzt
EDIT:
Da wird ASCII in Zahlen gewandelt. Das kann man verständlicher machen indem man Minus 48 oder Minus 0x30 macht. Einfach weil '0' den ASCII Wert 48 hat
48 = '0' = 11 0000
49 = '1' = 11 0001
Wenn man dann einfach alles außer den unteren 4 Bit auf 0 setzt, wird aus 48 -> 0 oder aus 49 -> 1
Und was bedeutet das "int" in Klammern?
Macht man so die Konversion von String in Integer?
Oder anders herum: Würden die bei der von Dir beschriebenen Bit-Operation entstehenden Ergebnisse sonst weiter als String bestehen bleiben und einen type mismatch error erzeugen?
Das in Klammern nennt sich Cast oder Typ-Umwandlung:
Damit wird ein char (kein String!) in int umgewandelt damit man damit rechnen kann und 2 Bytes statt 1 Byte hat. Im Prinzip:
char c = '1';
int zahl = (int)c;
Ein Typ-Mismatch entsteht da nicht. Der Compiler ist in diesem Fall in der Lage das implizit zu konvertieren. Der Cast ist unnötig so wie ich das sehe. Das hier kompiliert in C++ auf dem PC problemlos und gibt das richtige Ergebnis aus:
char ch = '1';
short zahl = ch & 0x0F;
cout << (bitset<8>)ch << endl << (bitset<16>)zahl << endl;
Short statt int, da int auf dem PC 4 Bytes hat. Das mit dem bitset ist um die Binärdarstellung zu erhalten.
Das kann man verständlicher machen indem man Minus 48 oder Minus 0x30 macht. Einfach weil '0' den ASCII Wert 48 hat
Noch verständlicher wird es, wenn man sich nur merkt, dass die Zahlen aufeinanderfolgen :
Also muss man von dem Ascii-Zeichen nur das Zeichen '0' subtrahieren.
'9' - '0' = 9
byte b = buffer[i] - '0'; // liefert eine Zahl 0 .. 9, wenn in buffer[i] eins der Zeichen '0' .. '9' steht.
Dass '0' die Zahl 0x30 ist, merkt man sich mit der Zeit auch leicht
Aber -'0' ist genausoschnell gerechnet wie &0x0F, wenn mich nicht alles täuscht. Bräuchte man also gar nicht zu wissen...
@Mirko:
ja , buffer ist ein Array, buffer[0] ist das erste Element.
String ist übrigens ein missverständliches Wort : in der Referenz findest du