Como concatenar 2 variables tipo byte.

Hola a todos tengo una duda quisiera saber como unir dos bytes o mas para obtener otro numero, por ejemplo tengo lo siguiente:

int num=2600;
byte a,b;

void setup(){
a=2600; //Aca toma los 8 bits menos significativos que seria 00101000
b=num>>8; //Aca desplazo 8 bits a la derecha y los dejo como menos significativos que seria 00001010
}
void loop(){}

Quisiera saber como unir o concatenar a y b para que me vuelva a dar 2600.

Hola.
Pues realizando la operación inversa:

int num=2600;

byte a,b;

void setup(){
a=2600; //Aca toma los 8 bits menos significativos que seria 00101000
b=num>>8; //Aca desplazo 8 bits a la derecha y los dejo como menos significativos que seria 00001010

int c=(b<<8);
c+=a;
}

hola shikamarucb.

Para unir 2 byte transformándolo a un int tendrías que añadir 8 ceros con el operador "<<" después con el operador "|" concatenar
si son más de 2 byte continuas añadiendo ceros y concatenas en una variable acorde a los bytes
mírate las siguientes páginas:
http://arduino.cc/es/Reference/BitwiseAnd
http://arduino.cc/es/Reference/Bitshift

int num=2600;
byte b,a;
void setup(){
  Serial.begin(9600);
  Serial.print("num "); Serial.println(num,BIN);
 a=(byte)num ;
 Serial.print("a  ");   Serial.println(a,BIN);
b=num>>8; 
Serial.print("b  "); Serial.println(b,BIN);
Serial.println("===========");

num=b  ;num=num<<8|a;
     Serial.print("num ");  Serial.println(num,BIN);

}
void loop(){
 
}

Saludos

Man no he podido, tengo esto y no me imprime el numero:

#include <EEPROM.h>

int addr = 0;
byte a,b,c=1;long d,e,num=640000;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  a=num;
  b=num>>8;
  c=num>>16;
  Serial.println(a);
  delay(300);
  Serial.println(b);
  delay(300);
  Serial.println(c);
  delay(300);
  
  d=(c<<16);
  e=(b<<8);
  d=d+e+a;

  Serial.println(d);
  delay(300);

  
}

prueba con:

#include <EEPROM.h>

int addr = 0;
byte a,b,c=1;long d,e,num=640000;
void setup()
{
  Serial.begin(9600);
  Serial.println(num,BIN);
 a=num;
  b=num>>8;
  c=num>>16;
  Serial.println(a,BIN);
  delay(300);
  Serial.println(b,BIN);
  delay(300);
  Serial.println(c,BIN);
  delay(300);
  
 num=c;num=num<<8|b;num=num<<8|a;

  Serial.println(num,BIN);
  delay(300);}

void loop()
{
 

  
}

Muchas gracias man, ya aprendi y ya pude concatenar las dos variables. :slight_smile: Gracias. :slight_smile:

Lo sugiero de la siguiente manera...

 Serial.begin (9600);
 //randomSeed(analogRead(0));

 Byte_Config[0]=EEPROM.read(0);     //Parte más significativa de cualquier "int"
 Byte_Config[1]=EEPROM.read(1);     /Parte más significativa de cualquier "int"
 
 int intTemp=  Byte_Config[0]<<8;    //Tomamos la parte HIGH y la desplazamos 8 dígitos a la izaquierda
 intTemp=  intTemp + Byte_Config[1]; //Sumamos la parte LOW para completar nuestro "in"
 Config[0] = intTemp;                //Lo cargamos a nuestro registro.
 
 if(Serial.available()>=0)  {        //Lo mostramos en el monitor serie para comprobar
   Serial.println(Config[0]);
 }
 
}
1 Like