[sem desvalorizar as d+!!] a solução dos nossos amigos tcp/Samsoniuk parece ser + inteligente e aparentemente "dói" menos no quesito memória utilizada. Isso, pelo menos na minha mais humilde ainda opinião, é prática.
bjs
Moderadores: andre_luis, 51, guest2003, Renie
lellis escreveu:dentro da lei!! (legal). + automático + inteligível e talvez o cód fique mais menor de pequeno.
mas pelo que eu saiba (sabia) int era só 16 bits. talvez um long, word, float, 2 int´s?? kêkéíço UINT32?
abrç
Marcelo Samsoniuk escreveu:lellis escreveu:dentro da lei!! (legal). + automático + inteligível e talvez o cód fique mais menor de pequeno.
mas pelo que eu saiba (sabia) int era só 16 bits. talvez um long, word, float, 2 int´s?? kêkéíço UINT32?
abrç
eh mesmo, foi mal, eh que no gcc o int costuma ser 32 bits =x
#define LwordPTR(var32) ((unsigned int*)(&var32))
#define HwordPTR(var32) ((unsigned int*)(&var32)+1)
#define getLword(var32) ((unsigned int)(*LwordPTR(var32)))
#define getHword(var32) ((unsigned int)(*HwordPTR(var32)))
#define setLword(var32,var16) {(unsigned int)(*LwordPTR(var32)=var16);}
#define setHword(var32,var16) {(unsigned int)(*HwordPTR(var32)=var16);}
//Obtendo o endereço de um tipo 32 bits...
#define Lmbyteptr(var32) ((unsigned char*)(&var32))
#define LMbyteptr(var32) ((unsigned char*)(&var32)+1)
#define Hmbyteptr(var32) ((unsigned char*)(&var32)+2)
#define HMbyteptr(var32) ((unsigned char*)(&var32)+3)
//dividindo 32 em 8 bits...
#define getLmbyte(var32) ((unsigned char)(*Lmbyteptr(var32)))
#define getLMbyte(var32) ((unsigned char)(*LMbyteptr(var32)))
#define getHmbyte(var32) ((unsigned char)(*Hmbyteptr(var32)))
#define getHMbyte(var32) ((unsigned char)(*HMbyteptr(var32)))
//Juntando tudo!
#define setLmbyte(var32,var8) {(unsigned char)(*Lmbyteptr(var32)=var8);}
#define setLMbyte(var32,var8) {(unsigned char)(*LMbyteptr(var32)=var8);}
#define setHmbyte(var32,var8) {(unsigned char)(*Hmbyteptr(var32)=var8);}
#define setHMbyte(var32,var8) {(unsigned char)(*HMbyteptr(var32)=var8);}
// DOIS INTEIROS
long int varlong = 0x12345678;
long int *ptr_long = &varlong;
void *ptr_void;
int *ptr_int;
void main ( void )
{
unsigned int a,b;
ptr_void = ptr_long;
ptr_int = (int *) ptr_void;
a = *ptr_int;
b = *(ptr_int+1);
while ( 1 );
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante