transformar uma variavel de 32bits em 4 int

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor ze » 24 Abr 2008 13:16

[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
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor msamsoniuk » 24 Abr 2008 13:28

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
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor phophollety » 24 Abr 2008 18:45

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


bom, ao menos no c30 e no c18 são 16 bits...
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor cristian » 24 Abr 2008 21:38

obrigado amigos pelas respostas usei as duas
o codigo do rodrigo funcionou legal

mas o codigo do guest economizou 60words


mas valeu resolveu meus problemas e fica ai pra quem quiser usar
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

!

Mensagempor Budweiser » 27 Abr 2008 01:22

Oie!!! também quero dar minha opinião!

C30:
long, float = 32 bits (não nativo, shift (>>) não funciona...)
int = 16 bits
char = 8 bits

Uma maneira de "quebrar" os 32... E depois "colar" de novo...

Código: Selecionar todos
#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);}


...E, se quiser "quebrar" ainda mais (8 bits...)

Código: Selecionar todos
//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);}


Fui!
Budweiser
Nibble
 
Mensagens: 68
Registrado em: 28 Mar 2008 15:37
Localização: Florianópolis - SC

Mensagempor Maurício » 17 Jun 2008 20:11

Apesar de ter passado tanto tempo, experimenta isso:

Código: Selecionar todos
// 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 );
}


[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x