PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : int später wieder zusammensetzen (c#)



dominik699
12.08.2010, 13:42
hallo,

ich weiß es passt nicht wirklich hierher, aber ich habe folgendes problem...

schicke ein signed int32_t über die serielle schnittstelle an den pc.

dort lese ich mit einer in c# geschreibenen software wieder aus.
habe ursprünglich das zusammensetzen der 8bit werte zu einem 32 bit zahl ursprünglich so gelöst:

byte[] buffer = new byte[20];

int lleistung = 0;

lleistung = buffer[13];
lleistung += (buffer[12] << 8);
lleistung += (buffer[11] << 16);


funktiniert auch gut, solange nur positive zahlen ankommen. ist logisch, da ja die zahlen im zweierkompliment vorliegen... habe mir dann gedacht so müsste es gehen.

lleistung = (int)((buffer[11] << 24) & (buffer[12] << 16) & (buffer[13] << 8) & (buffer[14]));

lleistung ist aber immer 0.

wie macht man das richtig?

vielen dank

Jaecko
12.08.2010, 14:19
Ein & ist was anderes als ein +.

Wenn du sowas wie (buffer[11] << 24) & (buffer[12] << 16) machst und buffer ist jeweils ein Byte, dann kommt immer 0 raus, da & ein logisches AND ist.

AlexAtRobo
12.08.2010, 14:36
Du mußt die Teilzahlen verodern... nicht mit und
weil du erzeugst ja folgendes:
10010000 00000000 00000000 00000000 (mit <<24)
00000000 01001001 00000000 00000000 (mit <<16)
und haben willst du:
10010000 01001001 00000000 00000000
das erreichst du mit | also oder

lg

Alex

dominik699
12.08.2010, 14:44
ach ja genau stimmt....

danke vielmals