Podivne chovani memcpy()

mira mira na tmapy.cz
Středa Říjen 10 09:55:42 CEST 2001


Kasparek Tomas wrote:
> 
> On Wed, 10 Oct 2001, mira wrote:
> 
> > V programu v C se momentalne setkavam s podivnym chovanim funkce
> > memcpy().
> >
> > V jedne procedure vytvarim buffer (char* packet), veliky  BYTU, do
> > ktereho ruzne ukladam bud 1-bytove nebo 2-bytove veci (1-bytove
> > prirazenim, 2-bytove pomoci memcpy).
> >
> 
> Nebylo by jednodusi (a efektivnejsi) cist 2-bytove cila pomoci
> pretypovani na cilovy typ - unsigned int? - treba pres druhe pole
> ktere se bude prekryvat s tim prvnim ale bude mit jiny bazovy typ,
> a nebo pomoci pretypovani na zakladnim poli.
> 
To bych delal rad, ale to nefunguje. A to ani po takovych konstruktech,
jako je vyraz 	cislo_2 = (unsigned int)(*((unsigned int*)(packet+7));

Nebo se to ma delat jinak? Pokud se udela jednoduse *(unsigned
int*)(packet+7) nebo jeste jednoduseji (unsigned int)packet[7],
nefunguje to (pri cislech vyssich nez 1 byte, tj. 255).
Prekryvaci pole bych musel delat 2, protoze nektere int zacinaji na
lichych pozicich - a to mi prijde se jeste krkolomnejsi nez pres
memcpy().

 Krome toho nechapu, proc to memcpy se chova tak, jak jsem popsal v
predesle uloze.

S pozdravem Michal Řada, Mgr.


Další informace o konferenci Linux