2016-04-06 8 views
-2

Ich erhalte folgenden Fehler. Ich habe alle Arten von Typcasting versucht, aber keine Hilfe. Bitte lassen Sie mich wissen, was hier vor sich geht.Kompilierungsfehler während der Bitverschiebung "Konnte Typ 'int' nicht implizit in 'Byte' umwandeln"

Error: Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) 

byte[] bitVector = new byte[UInt32.MaxValue/8]; 

//bitVector[((UInt32)x/8)] |= (1 << ((int)(x % 8))); ERROR 
//bitVector[((UInt32)x/8)] |= (1 << Convert.ToByte(x % 8)); ERROR 
bitVector[((UInt32)x/8)] |= (1 << 5); //No Error 
+0

Was ist die Definition von BitVector Array –

+0

@Mrinal Kamboj Ich habe meine Frage bearbeitet. Es ist Byte [] – user3604557

+0

Fast doppelt - http://stackoverflow.com/questions/4123788/whats-wrong-with-this-expression-cannot-implicitly-convert-type-int-to-byte, fühlen Sie sich frei, genau zu finden duplizieren, das Typen erklärt, die von Verschiebeoperatoren akzeptiert/zurückgegeben werden (Hinweis: Byte gehört nicht dazu). Beachten Sie, dass die Regeln für Kompilierzeitkonstanten unterschiedlich sind und von einem anderen Duplikat (für die letzte Zeile des Beispiels) abgedeckt werden. –

Antwort

1

Nach soll helfen

bitVector[((UInt32)x/8)] |= (byte)(1 << x % 8) 

Ergebnis der bit Betrieb ist integer und Sie versuchen, es in byte Art zu füllen, deshalb braucht es eine explizite Typumwandlung

+0

Danke für die Antwort. Ich bekomme folgenden Fehler. "Operator '<<' kann nicht auf Operanden vom Typ 'int' und 'uint' angewendet werden." – user3604557

+0

Was ist der Typ von x? –

+0

Ok Ihr x ist Uint Typ, dann müssen Sie folgende Änderung vornehmen: (Byte) (1 << (int) (x% 8)). Tippe die (x% 8) explizit auf Integer –

0

Sie müssen dies nutzen

bitVector [((UInt32) x/8)] | = ((Byte) 1 < < (1% 8)) ;

Die beiden, die Ihnen Probleme bereiten, tun dies, weil Sie versuchen, ein int (das Ergebnis der Byteverschiebung) einem Bytearray zuzuordnen, indem Sie die Konstante, die Sie verschieben, zu einem Byte zwingen erwartetes Ergebnis.

+0

Vielen Dank für Ihre Antwort. Ich bekomme immer noch den Fehler, sobald ich diesen benutze (x% 8). Beachten Sie, dass ich möchte (x% 8), nicht (1% 8) – user3604557

Verwandte Themen