c přižezení adresy do ukazatele

Jan Waclawek konfera na efton.sk
Čtvrtek Duben 10 11:02:31 CEST 2014


Prenositelna varianta je "manualne" zlozit zdrojove byty, previest
operaciu, a potom ich "manualne" rozlozit, nieco ako

#include <stdint.h>

typedef struct {
  uint8_t a;
  uint8_t b;
} bla_t;

bla_t t;

{
  uint16_t tmp;
  
  tmp = t.a + 256 * t.b;
  tmp = (tmp << 1) | (tmp >> (16 - 1));
  t.a = (tmp >> 0) & 0xFF;
  t.b = (tmp >> 8) & 0xFF;
}

Toto pre pravoverneho ceckara vyzera trapne (a ano, da sa to napisat do
jedneho riadku :-) ), ale slusny prekladac to neprelozi horsie ako ked sa
pouzije type punning.

Aby nedoslo k omylu, aj ja bezne pouzivam type punning v oboch podobach, aj
ked sa mi viac paci ten union... (dalsi namet pre psychologicku analyzu
mojho vztahu k C...) ;-)

wek


----- Original Message ---------------
>>Dne 10.4.2014 8:31, Miroslav Draxal napsal(a):
>>>
>>> Ale né, tady je to zámìr. Mam dva byty v (v unionu struktura dvou 
>>> charu, vím ¾e pøekladaè si je mù¾e hodit kam chce, ale HiTech ty dva 
>>> byty dr¾í dùslednì vedle sebe) potøebuji k nim pøistupovat jako 
>>> k charum pro úsporu místa a hlavnì rychlosti. Pak to celé potøebuji 
>>> zarotovat. Tak¾e proto ten na int a jednodu¹e s tím zarotovat a pak 
>>> zase pøístup pouze k charùm. Ten výsledný kód potom vypadá skoro 
>>> pøesnì tak, jak bych to udìlal v asm.
>>>



Další informace o konferenci Hw-list