Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rod00x3 en 5 Enero 2013, 00:03 am



Título: ayuda con comparacion en sentencia
Publicado por: rod00x3 en 5 Enero 2013, 00:03 am
hola como estan mi duda es sobre una funcion que usa un argumento como puntero
en general para cada parametro de posible entrada uso (adl_ioDefs_t *)Param)[ 0 ])
(adl_ioDefs_t *)Param)[ 1 ])
(adl_ioDefs_t *)Param)[ n ])

Lo que quiero es saber si me pueden ayudar para en lugar de comparar caracter por caracter de la cadena pueda comparar toda una cadena, ejemplo:

if(((((adl_ioDefs_t *)Param)) & ADL_IO_LEV_HIGH)=="0011001")

el codigo actual que tengo es el siguiente:

if(((((adl_ioDefs_t *)Param)[ 7 ]) & ADL_IO_LEV_HIGH)==0)

{

adl_atSendResponse(ADL_AT_RSP,"\n detonado");

adl_smsSend(smshandle,"","accion",ADL_SMS_MODE_TEXT);

}


Título: Re: ayuda con comparacion en sentencia
Publicado por: BlackZeroX en 5 Enero 2013, 01:08 am
.
strcmp() (http://www.cplusplus.com/reference/cstring/strcmp/)

Dulces Lunas!¡.


Título: Re: ayuda con comparacion en sentencia
Publicado por: rir3760 en 5 Enero 2013, 03:48 am
Lo que quiero es saber si me pueden ayudar para en lugar de comparar caracter por caracter de la cadena pueda comparar toda una cadena [...]

el codigo actual que tengo es el siguiente:

if(((((adl_ioDefs_t *)Param)[ 7 ]) & ADL_IO_LEV_HIGH)==0){
   adl_atSendResponse(ADL_AT_RSP,"\n detonado");
   adl_smsSend(smshandle,"5543299041","ATM sucursal COSMOBIT a detonado",ADL_SMS_MODE_TEXT);
}
La condición es:
1) Convertir la variable "Param" al tipo "adl_ioDefs_t *"
2) Comparar ambos valores con el operador a nivel de bits AND.
Y es verdadera si ningún par de bits esta a uno.

Honestamente no creo que busques una comparación de cadenas. Aquí lo mejor es explicar en detalle la operación que deseas realizar en base al tipo "adl_ioDefs_t *" y la macro ADL_IO_LEV_HIGH. También indica el compilador, plataforma y bibliotecas que estas utilizando para el programa.

Un saludo


Título: Re: ayuda con comparacion en sentencia
Publicado por: rod00x3 en 7 Enero 2013, 19:33 pm
Ok, es solo que pense que mi solucion seria a algo estandar de c,
este es el codigo que tengo, es de un modulo de sierra wireless, lo que quiero es poder manipular los if de una manera mas simple, como enunciaba, cada param[n] es una entrada.

#include "adl_global.h"
#include "generated.h"
#include "adl_CmdHandler.h"
#include "adl_sms.h"
#include "adl_gpio.h"

bool SmsNuevo(ascii *telno,ascii *smstimelnth,ascii *smstex);
void SmsEnviado(u8 Event, u16 Nb);
void MyGpioEventHandler ( s32 GpioHandle, adl_ioEvent_e Event, u32 Size, void *Param );

u8 smshandle;         //Guarda la informacion de los SMS.
ascii buffer[200];

s32 myGpioOut_Handle;

#define NUM_GPIO_OUT 1

u32 My_Gpio_Label1 [ NUM_GPIO_OUT ] = {25};

adl_ioDefs_t Gpio_Out_Config [NUM_GPIO_OUT] = {ADL_IO_GPIO | 25 | ADL_IO_DIR_IN};

// Gpio Event Handle
s32 MyGpioEventHandle;

/****************************************************************************************/
//Programa Principal
void main_task ( void )
{
   adl_ioDefs_t Gpio_to_read1 = ADL_IO_GPIO | My_Gpio_Label1 [ 0 ] ;
   s32 ReadValue;

    adl_atSendResponse(ADL_AT_RSP,"      \"PUSH REMOTO\"        \r\n");
    adl_atSendResponse(ADL_AT_RSP,"  AG ELECTRONICA S.A DE C.V  \r\n");

    smshandle=adl_smsSubscribe((adl_smsHdlr_f)SmsNuevo,(adl_smsCtrlHdlr_f)SmsEnviado,ADL_SMS_MODE_TEXT);

    MyGpioEventHandle = adl_ioEventSubscribe ( MyGpioEventHandler );

    myGpioOut_Handle = adl_ioSubscribe ( NUM_GPIO_OUT, Gpio_Out_Config, ADL_TMR_TYPE_100MS, 1, MyGpioEventHandle );

    // Read inputs
    ReadValue = adl_ioReadSingle (myGpioOut_Handle, &Gpio_to_read1 );
}
/****************************************************************************************/

/****************************************************************************************/
bool SmsNuevo(ascii *telno,ascii *smstimelnth,ascii *smstex){
   //Rutina llamda por el sistema operativo cuando llega un SMS.
    //Los parametros son -> numero telefonico,longuitud del mensaje, texto del sms.
       ascii buffer[200];  //se delcara un buffer para organizar los datos.

       wm_strcpy(buffer,"\n\r Nuevo mensaje ha llegado\r\n Numero telefonico: ");    //se imprime en el buffer la cadena nuevo mensaje, numero telefonico:
       wm_strcat(buffer,telno);                                                      //se adjunta el numero telefonico
       wm_strcat(buffer,"\r\n Mensaje: ");                                           //se adjunta el texto "mensaje"
       wm_strcat(buffer,smstex);                                                     //se adjunta el mensaeje de texto que llego.
       adl_atSendResponse(ADL_AT_RSP,buffer);                                        //se imprime todo por el puerto serial.
      adl_atSendResponse(ADL_AT_RSP,"\n");

      return(1);
}
/****************************************************************************************/


/****************************************************************************************/
void SmsEnviado(u8 Event, u16 Nb){
    switch(Event){

        case ADL_SMS_EVENT_SENDING_OK:
            adl_atSendResponse(ADL_AT_RSP,"\n\r Mensaje Enviado Correctamente\r\n");
        break;

        case ADL_SMS_EVENT_SENDING_ERROR:
            adl_atSendResponse(ADL_AT_RSP,"\n\r Error Al Enviar Mensaje\r\n");
        break;
    }
}
/****************************************************************************************/

// GPIO event handler
void MyGpioEventHandler ( s32 GpioHandle, adl_ioEvent_e Event, u32 Size, void *Param )
{
// Check event
   switch ( Event )
      {
         case ADL_IO_EVENT_INPUT_CHANGED :
            {
               if(((((adl_ioDefs_t *)Param)[ 0 ]) & ADL_IO_LEV_HIGH)==0)
                  {
                     adl_smsSend(smshandle,"","PUSH ACTIVADO",ADL_SMS_MODE_TEXT);
                        //Se envia un mensaje de texto con los parametros "Numero Telefónico" y "Mensaje".
                  }
            }
         break;
      }
}

este es el codigo original, yo lo quiero modificar para 8 entradas, no entiendo del todo lo que pasa pero esto me funciono a medias:
1) incremente el numero del arreglo y la definicion de la entrada, y logre tener en el evento 8 entradas, pero cuando hay 2 simultaneas me envia ambos registros, y quiero que solo me envie la que mas reciente.

Segun yo con entender esa parte que postee de comparar lo que hay en param, ya esta. pero no tengo mucha idea.