čtvrtek 1. července 2010

C/C++: Trocha pointerové poezie

Nechť máme funkci, která nám po nějaké, blíže nespecifikované komunikaci, vyšle data z bufferu, který jí předáme v parametru..

void sendFunction(byte *pBuffer, byte lenght)

Inu pořídíme si takový buffer..

byte sendBuffer[30];

naplníme..

byte lenght=0;
byte temp1 = 111;
byte temp2 = 222;

sendBuffer[lenght++] = temp1;
sendBuffer[lenght++] = temp2;

a vyšleme..

sendFunction(sendBuffer, lenght);

Nic složitého, já vím.

Jak si ale nejlépe poradit s naplněním bufferu, pokud proměnné temp1 a temp2 budou 16-ti nebo 32-ti bitové proměnné ?


První co asi člověka napadne, je něco jako..

byte lenght=0;
word temp1=111;
dword temp2=222;

sendBuffer[lenght++]  = (byte)(temp1&0xFF);
sendBuffer[lenght++]  = (byte)(temp1>>8);

sendBuffer[lenght++]  = (byte)(temp2&0xFF);
sendBuffer[lenght++]  = (byte)(temp2>>8);

sendFunction(sendBuffer, lenght);

Maskovat a rozdělovat vícebajtové proměnné jen pro to, abych je mohl přidat do bufferu, kde se zase spojí.. to se mi moc nelíbilo a tak nakonec vznikl následující zápis..


*(word *) (sendBuffer+lenght) = temp1;
lenght += sizeof(word);

*(dword *) (sendBuffer+lenght) = temp2;
lenght += sizeof(dword);

sendFunction(sendBuffer, lenght);

Krásně tu vyniká elegance pointerů, která, podle mne, přináší i o něco rychlejší řešení.

Žádné komentáře:

Okomentovat