Re: Adresace přes pointer

Miroslav Mraz mrazik na volny.cz
Čtvrtek Říjen 26 14:30:05 CEST 2023


Takhle také ne. Nevšiml jsem si, že kopírovat se mají jednotlivé byty. 
Což opravdu bude závislé na platformě. V C++ můžete použít přiřazení 
přetížením operátoru=, ale moc to nedoporučuji.
typedef uint8_t byte;
struct tDATA {
   int16_t x;
   int16_t y;
   tDATA & operator= (const byte * ptr) {
     memcpy (this, ptr, sizeof(tDATA));
     return * this;
   }
}__attribute__((packed)) Data;
byte buf[] = {0x10,0x11,0x12,0x13};
static void test () {
   Data = buf;
   printf("x = 0x%04X, y = 0x%04X\n", Data.x, Data.y);
}
test() vypíše na malém indiánu
x = 0x1110, y = 0x1312
Nevím, co je účelem, ale takto to opravdu má fungovat.

Mrazík

On 26. 10. 23 13:26, Miroslav Mraz wrote:
> *ADATA=buf;
> je v C-čku blbost. Pole musíte kopírovat pomocí cyklu for()
> int16_t * ADATA=(int16_t*)&DATA;
> for (int i=0; i<2; i++) ADATA[i]=buf[i];
> ale memcpy() vůbec není špatný nápad.
> 
> Mrazík


Další informace o konferenci Hw-list