Cuanto bytes soporta toInt()

Hola estoy con una secuencia de comunicacion pero tengo un problema, la funcion tint() me devuelve un número erroneo y creo que es por la cantidad de bytes recibidos que son unos 36 en total, si recibo 12 funciona correctamente pero con los que mencione no, yo recibo toda la trama la guardo en una variable y cuando hago
variable.toint();
me devuelve un número erroneo, vuelvo a comentar que si la trama tiene 12 bytes funciona correctamente.
No pude encontaar nada en la web con respecto a lo que pregunto
gracias

¿Valor guardado?
¿Tipo de variable que contiene la información antes de convertir?

36 bytes quieres pasarlos a int? Un entero tiene 4 bytes, no se como 12 bytes te funcionan bien, porque de nuevo, un entero sin signo va de 0 a 65535 y a la mitad con signo -32767 0 32768
Un entero largo o long tiene 2^31 bits = 2.147.483.648 cuento 10 números.
Algo no va en lo que explicas.

perdon entonces me confudo, tengo tramas de numeros asi: 34, 45, 65 etc a eso le dije byte pero me doy cuenta que es un numero de 8 bytes puede ser? y bueno la trama tiene 36 numeros

Okay, la trama tiene 36 números y los quieres convertir pero a número se sale de los rangos posibles. El mas grande es el que te indiqué.
Acaso estan separados por comas o algo?
Porque no pones un ejemplo de la posible trama.

Si perdon, los numeros vienen de a pares asi: 33, 00, 57, 1C, se van enviando de esa manera hasta tener los 36 pares

long pollMeters(byte * meter)
{
  byte meterData[8];

  SendTypeR(meter, sizeof(meter));
  waitForResponse(meter[1], meterData, sizeof(meterData));

  String sMeter;
  for (int i = 2; i < 6; i++) {
    sMeter.concat(String(bcd2dec(meterData[i]) < 10 ? "0" : ""));
    sMeter.concat(String(bcd2dec(meterData[i])));
  }
  return sMeter.toInt();
}


void waitForResponse(byte & waitfor, byte * ret, int sz)
{

  byte responseBytes[sz - 2];
  int wait = 0;
  while (Serial1.read() != waitfor && wait < 3000) {
    delay(1);
    wait += 1;
  }

  if (wait >= 3000) {
    Serial.println(F("Unable to read data - timeout"));
    memset(ret, 0, sz);
    sasError = true;
    return;
  }
  Serial1.readBytes(responseBytes, sizeof(responseBytes));
  ret[0] = {0x01};
  ret[1] = waitfor;
  memcpy(ret + 2, responseBytes, sizeof(responseBytes));
  return;

}

Estas son las dos funciones, que funcionan con una trama mas corta pero al volcarla con el toint() tira cualquier cosa, aclaro que sin el toint() si muestra correctamente el valor.

Entonces no son números, son bytes, ahora me doy cuenta que te entendí mal, porque siempre hablaste de trama.
No puedes convertir eso a int, son bytes en hexadecimal.
Tienes que saber que estas recibiendo y no suponer cosas.
Evidentemente ese código lo tomaste de algún lado, a que dispositivo pertenece? Danos por favor el contexto de la situación.

si lo tome de otro lado, estoy tratando de entenderlo, lo modifique un poco, es de un sistema de comunicacion SAS entre maquinas tragamonedas, es para recibir datos de las mismas, e pregunto para saber bien como mencionarte este numero 1C cuantos bytes tiene?

Son 2 char que representan 1 byte.

Saludos

Ha ok entonces seria un char compuesto por 36 bytes

Cada byte puede contener valores entre 0 y 255 (en decimal) que en hexadecimal se representan como "00" y "FF".

Entonces lo que estás enviando con cada par de caracteres es el valor de 1 byte pero codificado en hexa.

¿Por qué no hacerlo en decimal?
Porque tendrías que enviar 3 dígitos (entre "000" y "255") y la trama sería más larga.

Como tanto de una u otra forma hay que convertirlos al recibirlos para pasar los caracteres al valor que representan, lo mejor es elegir la trama más corta.

Si tu trama envía el contenido de 12 bytes, sí, tendría 36 caracteres.
Tienes, los 2 que representan el número + la coma de separación, son 3 caracteres × 12 = 36 (suponiendo que incluso el último de la trama lleva la coma).

Saludos

Muy buena la explicacion, la maquina transmite asi, no puedo cambiarla solo necesito tomar los datos para saber que quiere/le pasa, por eso quiero pasarlo a int asi lo manejo mejor, pero con tu explicacion voy a ver que resuelvo.
gracias y cualquier duda lo coment
saludos

Porque no capturas una o varias tramas y los muestras acá y nos das mas información de que deberían representar?
Dices que es :

Tienes algún link, manual, que puedas compartir?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.