Fehler (CS0266) bei bit manipulierung - wie vernuenftig umgehen?



  • In C#, mit dem VS 2005:
    Fehler CS0266: Der Typ "int" kann nicht implizit in "byte" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

    Diesen Fehler bekomme ich bei folgenden Code:

    //irgendwo definiert
    byte b=0;
    byte pos=0;
    
    //diese zeile liefert den fehler:
    byte h = b >> pos;
    

    Die Fehlermeldung kann ich umgehen indem ich caste:

    byte h = (byte)(b >> pos);
    

    Problem dabei ist aber, dass ich sehr viele solcher shifts, ands, ors, etc habe, so dass das dauernde casten sehr nervig ist. Vorallem da ich nicht verstehe warum ich hier ueberhaupt casten soll 😕

    Hat jemand eine elegantere Loesung oder wenigstens eine Erklaerung warum ich hier casten muss?

    wenn ich ein byte shifte kann doch nur ein byte rauskommen...

    Wenn ich alles mit int statt byte mache, geht es auch ohne casten - aber das ist unschoen weil ich mit 1 byte einheiten und nicht 4byte einheiten arbeite...



  • http://msdn2.microsoft.com/en-us/library/xt18et0d(VS.71).aspx

    Wie Du in der (übrigends frei zugänglichen Sprachdokumentation von C# im MSDN nachlesen kannst) arbeitet der Shiftoperator nur mit int und long Datentypen.

    Bleibt eventuell noch die Möglichkeit den Operator zu überladen (http://msdn2.microsoft.com/en-us/library/s53ehcz3(VS.71).aspx). Dadurch verlagerst du die Casterei aber nur in den overload-operator.



  • Verwende doch einfach ints. Dann kannst shiften wie du willst, und zum schluss einmal das gewünschte Byte rausmaskieren und fertig. byte als Datentyp zu benutzen ist unter .net eh suboptimal.


Anmelden zum Antworten