Diferencia entre revisiones de «highByte()»

De ArduWiki
Saltar a: navegación, buscar
(Descripción)
(Vea también)
 
(No se muestran 16 ediciones intermedias del mismo usuario)
Línea 14: Línea 14:
  
 
== Advertencias ==
 
== Advertencias ==
Nada.
+
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.
 +
 
 +
<pre>
 +
long val = 0x11223344;
 +
highByte(val);      //33
 +
lowByte(val);        //44 (LSB)
 +
</pre>
 +
 
 +
== Ejemplo 1 ==
 +
Descomponer en [[byte]]s y reconstruir un [[int]].
  
== Ejemplo ==
 
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
int n = 12345;
+
void setup(){
byte val1 = highByte(n);
+
  Serial.begin(9600);
byte val2 = lowByte(n);
+
  //Descomponer
int z;
+
  int dat1 = 12345;
z = val1;   //Tomamos MSB
+
  Serial.println(dat1, HEX);    //0x3039
z <<= 8;   //Desplazamos 8 bits a la izquierda
+
  byte val1 = highByte(dat1);   //0x30 (MSB)
z |= val2;  //Añadimos LSB
+
  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
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
Descomponer en [[byte]]s y reconstruir un [[long]].
 +
 
 +
<syntaxhighlight lang="c++">
 +
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 *******
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
* [[bit()]]
+
<categorytree mode=all>Funciones bit y byte</categorytree>
* [[bitClear()]]
+
<categorytree mode=all>Operador bit a bit</categorytree>
* [[bitRead()]]
 
* [[bitSet()]]
 
* [[bitWrite()]]
 
* [[bitshift left]] - (<nowiki><<</nowiki>)
 
* [[bitshift right]] - (<nowiki>>></nowiki>)
 
* [[lowByte()]]
 
* [[shiftIn()]]
 
* [[shiftOut()]]
 
* [[or 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 actual del 17:40 14 jul 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