Jump to content

Recommended Posts

Posted (edited)

Tenho um vector de caracteres:

static unsigned char buffer[100];

Quero comparar o valor, mas só dos primeiros 4 caracteres

if (strcmp(buffer[3], "0X7E") == 0) {
printf("Mensagem Certa");}

Mas não está a funcionar, alguém pode ajudar?

Edited by thoga31
GeSHi
Posted

olha para os argumentos da função strcmp :

http://pubs.opengroup.org/onlinepubs/009695399/functions/strcmp.html

int strcmp(const char *s1, const char *s2);

The strcmp() function shall compare the string pointed to by s1 to the string pointed to by s2.

teres buffer[3] não quer dizer os 4 primeiros elementos da string ! quer dizer o elemento na posição 3 da string/lista de caracteres ...

o que pretendes é facilmente realizado com a função strncmp :

http://pubs.opengroup.org/onlinepubs/009695399/functions/strncmp.html

IRC : sim, é algo que ainda existe >> #p@p
  • 2 weeks later...
Posted

Eu tou a receber via porta serie uma mensagem que é uma array de inteiros (Mensagem:12637608255255255255255255255255).

Como faço para comparar a mensagem, mas apenas determinados valores, por exemplo os 3 primeiros?

Obrigado

Posted (edited)
int message[MAX];
int check[3];

check[0] = 123;
check[1] = 4567;
check[2] = 89012;

if (memcmp(message,               // primeiro bloco de memoria a ser usado na comparacao
          check,                 // segundo bloco de memoria a ser usado na comparacao
          sizeof(int) * 3) == 0) // numero de bytes a serem comparados
{
 // os tres primeiros elemento sao iguais
}

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

Quantos, e quais, são os inteiros presentes na tua mensagem de exemplo?

Mensagem:12637608255255255255255255255255

12 inteiros: 1, 2, 6, 37, 60, 82, 552, 5525, 52552, 55255, 255255, e 255???

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Pois, já fiz a comparação correctamente, mas agora nunca identifica nenhuma igualdade.

Da mensagem (12637608255255255255255255255255), só quero comparar o 126 que corresponde a 7E, logo será o 1º byte.

Eu fiz:

if (memcmp(mensagem, check, sizeof (int)*1) == 0) {

}

Sendo que:

int check[] = 126;
Posted

Da mensagem (12637608255255255255255255255255), só quero comparar o 126

então afinal estás a receber caracteres alpha numéricos !!!!

não foi isso que disseste !!!

estás a receber inteiros (bytes com o valor numérico) ou caracteres alpha-numéricos representativos dos números ?

inteiros (bytes com o valor numérico)

é óbvio que nunca funcionaria !!!

char message[256]; // buffer com os caracteres da mensagem
char tester[256];

sprintf(tester, "126");
if (memcpy(message, tester, 3) == 0)
{
 // os três primeiros bytes são iguais : '1', '2' e '6'
}
IRC : sim, é algo que ainda existe >> #p@p
Posted

Numa aplicação em Java estou a mandar uma mensagem para a porta serie. É uma mensagem de teste e é: 12637608255255255255255255255255.

Num micro-controlador estou a receber essa mensagem (testado). Se começar por 126, vou efectuar determinada acção, que neste momento ainda não desenvolvi, porque não consegui ver se a mensagem começa por 126.

void vSerial() {
   static unsigned char vState = 1;
   static int mensagem;

   switch (vState) {
       case 1:
           if (u8SerialReceivedData()) { //pic recebe do pc (java)
               vState = 2;
               mensagem = getch(); // guarda o que recebe
           }
           break;
       case 2:
           if (... comparar para ver se a mensagem começa por 126) {
               vState = 3;
           } else {
               vState = 1;
           }
           break;
       case 3:
           //Começa por 126, Fazer determinada ação
           vState = 1;
           break;
   }
}
Posted

assim é impossível ...

dizes que envias uma mensagem ("12637608255255255255255255255255") onde não especificas como codificas isso (se é uma lista de inteiros ou uma lista de char's ...

depois apresentas um código onde a mensagem é um simples inteiro ...

é impossível saber que dados estás realmente a enviar e que dados quer processar

visto que deste modo não se vai a lado nenhum, só existe uma solução :

apresenta o código que foi pedido : o que envia os dados !!!

IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.