Autor Tema: Variable de 64 bits: extracción cada 8 bits.  (Leído 2310 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Samg

  • PIC10
  • *
  • Mensajes: 5
Variable de 64 bits: extracción cada 8 bits.
« en: 01 de Diciembre de 2014, 15:35:40 »
Hola a Todos!!!
Yo estoy trabajando con un LPC1769, y quiero guardar una trama de bits que me tira un sensor. Este entrega 40 bits(5 bytes), por lo que creo una variable de 64 bits donde guardarlos:
typedef unsigned long uint64_t;

uint64_t DATO;

Como cada Byte es un dato, lo que hago es extraerlos por separado en una variable de 8 bits,recurriendo al desplazamiento como lo especifico mas abajo:
typedef unsigned char uint8_t;
uint8_t dato_RH;

El problema se presenta que cuando desplazo para sacar el dato del 5to byte de la siguiente forma:

dato_RH=(uint8_t) ((DATO>>32)& 0x00FF);

y me responde con:
warning: right shift count >= width of type [enabled by default]
dato_RH= (uint8_t)( (DATO >> 32) & 0x00FF);
^
Finished building.

Como verán no soy un experto en el tema,alguna opinión?

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Variable de 64 bits: extracción cada 8 bits.
« Respuesta #1 en: 01 de Diciembre de 2014, 15:43:24 »
Hola, te marca la advertencia porque seguramente un unsigned long sigue pesando 32 bits.

Intenta:

typedef unsigned long long uint64_t;

Saludos.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Variable de 64 bits: extracción cada 8 bits.
« Respuesta #2 en: 01 de Diciembre de 2014, 16:18:11 »
5 post mas abajo del que creaste hay algo muy parecido con una solucion mucho más elegante:

http://www.todopic.com.ar/foros/index.php?topic=43562.0

saludos!
-
Leonardo Garberoglio

Desconectado Samg

  • PIC10
  • *
  • Mensajes: 5
Re: Variable de 64 bits: extracción cada 8 bits.
« Respuesta #3 en: 01 de Diciembre de 2014, 16:33:21 »
Hola, te marca la advertencia porque seguramente un unsigned long sigue pesando 32 bits.

Intenta:

typedef unsigned long long uint64_t;

Saludos.

Perfecto!
Muchas Gracias!!