Diferencia entre revisiones de «highByte()»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo 2)
(Referencias)
Línea 93: Línea 93:
 
* [[and bit a bit compuesto]] <nowiki>(&=)</nowiki>
 
* [[and bit a bit compuesto]] <nowiki>(&=)</nowiki>
  
== Referencias ==
+
== Referencias externas ==
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
  
[[Category:Funciones]]
+
[[Category:Funciones bit y byte]]

Revisión del 23:03 11 jun 2019

Descripción

Extrae el byte de orden superior (MSB) en int o el segundo byte más bajo de un tipo de datos más grande como long.

Sintaxis

highByte(variable);

Parámetros

variable
variable a evaluar que deberá ser int, long, float, unsigned int o unsigned long

Retornos

Retorna byte mas significativo.

Advertencias

Cuidado al trabajar con tipo long que es de 4 bytes, porque highByte() se refiere al que esta a la izquierda del LSB y no se refiere al MSB.

long val = 0x11223344;
highByte(val);       //33
lowByte(val);        //44 (LSB)

Ejemplo 1

Descomponer en bytes y reconstruir un int.

void setup(){
   Serial.begin(9600);
   //Descomponer
   int dat1 = 12345;
   Serial.println(dat1, HEX);     //0x3039
   byte val1 = highByte(dat1);   //0x30 (MSB)
   byte val2 = lowByte(dat1);    //0x39 (LSB)
   Serial.println("-------");
   //Reconstruir
   int dat2;
   dat2 = val1;                  //Tomamos MSB
   dat2 <<= 8;                   //Desplazamos 8 bits a la izquierda
   dat2 |= val2;                 //Añadimos LSB
   Serial.println(dat2, HEX);     //0x3039
}
void loop(){
   //Nada
}

Ejemplo 2

Descomponer en bytes y reconstruir un long.

void setup(){
   Serial.begin(9600);
   //Descomponer
   long dat1 = 123456789;
   Serial.println(dat1, HEX);
   byte val[4];
   for (byte i=0; i<4; i++) {
      val[i] = lowByte(dat1);
      Serial.println(val[i], HEX);
      dat1 >>= 8;   //desplazar aqui
   }
   Serial.println("-------");
   //Reconstruir
   long dat2;
   for (byte i=0; i<4; i++) {
      dat2 |= val[3-i];  //Meter en LSB
      if (i  3){  //Menor que 3
          dat2 <<= 8;     //desplazar aqui
      }
   }
   Serial.println(dat2);
}

void loop(){
   //Nada
}
********* Ejemplo incompleto no permite *******

Vea también

Referencias externas