Ein Datenbyte wird in einer Mitgliedsvariablen 'char' gespeichert. Es sollte wahrscheinlich als "unsigned char" gespeichert werden, aber das kann nicht geändert werden. Ich muss es durch eine 'int' Variable abrufen, aber ohne das Vorzeichen Bit zu verbreiten.Konvertierung von char in int ohne Vorzeichen für die Bitweiterleitung in C++
Meine Lösung war (UINT und UCHAR sind die offensichtlichen Typen):
void Foo::get_data(int *val)
{
if(val)
*val = (int)(UINT)(UCHAR)m_data; // 'm_data' is type 'char'
}
dies die beste Lösung für mich zu sein schien. Ich könnte anstelle des Castings
*val = 0xff & (int)m_data;
verwenden, aber das scheint nicht so lesbar. Welche Alternative ist besser, wenn auch und warum?
Sie haben am häufigsten (und wohl offensichtlichsten) weggelassen: einfach in 'unsigned char' umwandeln und das Ergebnis direkt in Ihrem' int' speichern. – WhozCraig
@WhozCraig: Ah, tatsächlich - das ist ansprechend. +1. In Antwort konvertieren und ich werde akzeptieren. – MPW
Warum nicht einfach abs() benutzen? Es ist definitiv der sauberste Weg, es zu tun. Es wird auch wahrscheinlich auf die effizienteste Weise möglich gemacht, wenn Sie einen guten Compiler verwenden. – patatahooligan