Konvertierungsprobleme in C#

Gast #2611470
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 ?
Gast #2611512
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 ?
Gast #2611622
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren