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
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