Diferencia entre revisiones de «highByte()»
De ArduWiki
(→Ejemplo) |
(→Vea también) |
||
(No se muestran 18 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | Extrae el byte de orden superior o el segundo byte más bajo de un tipo de datos más grande. | + | 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 == | == Sintaxis == | ||
Línea 14: | Línea 14: | ||
== Advertencias == | == 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. | |
+ | |||
+ | <pre> | ||
+ | long val = 0x11223344; | ||
+ | highByte(val); //33 | ||
+ | lowByte(val); //44 (LSB) | ||
+ | </pre> | ||
+ | |||
+ | == Ejemplo 1 == | ||
+ | Descomponer en [[byte]]s y reconstruir un [[int]]. | ||
− | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
− | int | + | void setup(){ |
− | byte val1 = highByte( | + | Serial.begin(9600); |
− | byte val2 = lowByte( | + | //Descomponer |
− | int | + | 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 | ||
+ | } | ||
+ | </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 == | ||
− | + | <categorytree mode=all>Funciones bit y byte</categorytree> | |
− | + | <categorytree mode=all>Operador bit a bit</categorytree> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == 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
Contenido
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