Forum: PC-Programmierung Konvertierungsprobleme in C#


von Leon (Gast)


Lesenswert?

Hi, ich habe ein Konvertierungsproblem in C#.
1
byte[] SendData = new byte[8];
2
int BlockSizeCnt = 0;
1
private void OnTimerEvent(object source, ElapsedEventArgs e)
2
{
3
....
4
SendData[0] = 0x20 | (BlockSizeCnt + 1);
5
....
6
}

Fehlermeldung: Der Typ "int kann nicht explizit in "byte" konvertiert 
werden. Wie kann ich das Problem lösen, ohne die Variable BlockSizeCnt 
als byte Variable zu deklarieren ?

von Peter II (Gast)


Lesenswert?

Leon schrieb:
> ie kann ich das Problem lösen, ohne die Variable BlockSizeCnt
> als byte Variable zu deklarieren

ich denke mit einem cast

SendData[0] = (byte)(0x20 | (BlockSizeCnt + 1) );

von Leon (Gast)


Lesenswert?

Ok vielen Dank. Es funktioniert!

von NurEinGast (Gast)


Lesenswert?

Nach meinem Verständniss dürfte das NICHT funktionieren.
Oder sagen wir - es dürft ab und zu zufällig funktionieren.

(byte)(0x20 | (BlockSizeCnt + 1) )

Sobald BlockSizeCnt > 255 ist, geht BlockSizeCnt einfach verloren.
Es wird abgeschnitten.
Wenn es > 31 ist, dann wird es durch das (| 0x20) zermatscht.

Und wenn BlockSizeCnt gar negativ wird - oh je.

Und wenn es NIE > 31 wird und NIE negativ wird - warum dann ein INT ?

von Markus V. (Gast)


Lesenswert?

NurEinGast schrieb:
> (byte)(0x20 | (BlockSizeCnt + 1) )
>
> Sobald BlockSizeCnt > 255 ist, geht BlockSizeCnt einfach verloren.
> Es wird abgeschnitten.
> Wenn es > 31 ist, dann wird es durch das (| 0x20) zermatscht.
>
> Und wenn BlockSizeCnt gar negativ wird - oh je.
>
> Und wenn es NIE > 31 wird und NIE negativ wird - warum dann ein INT ?

Wobei zu erwähnen bliebe, der Cast wird auf jeden Fall benötigt, auch 
wenn BlockSizeCnt vom Typ byte wäre, denn das Ergebnis der 
bitweisen-Operatoren &, &=, |, |=, ^ und ^= ist IMMER int.

Gruß
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.