dario1133 Posted February 14, 2013 at 11:27 AM Report #495233 Posted February 14, 2013 at 11:27 AM (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 February 14, 2013 at 10:42 PM by thoga31 GeSHi
HappyHippyHippo Posted February 14, 2013 at 11:31 AM Report #495238 Posted February 14, 2013 at 11:31 AM 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 Portugol Plus
dario1133 Posted February 14, 2013 at 12:03 PM Author Report #495241 Posted February 14, 2013 at 12:03 PM Obrigado, funciona com o strncmp. Não conhecia, obrigado!
dario1133 Posted February 14, 2013 at 03:09 PM Author Report #495264 Posted February 14, 2013 at 03:09 PM Já agora qual é a função que permite copiar determinados caracteres de um vector para uma variável? Por exemplo copiar da posição 5 até à 10 do vector!
HappyHippyHippo Posted February 14, 2013 at 03:16 PM Report #495265 Posted February 14, 2013 at 03:16 PM tens 5 bolas de ping-pong e uma colher de chã, achas que consegues segurar as 5 bolas ? nop para guardares 5 bolas de ping-pong, necessitas de 5 colheres de chã ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dario1133 Posted February 14, 2013 at 03:43 PM Author Report #495271 Posted February 14, 2013 at 03:43 PM 🙂 lol memcpy
dario1133 Posted February 22, 2013 at 05:07 PM Author Report #496659 Posted February 22, 2013 at 05:07 PM 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
HappyHippyHippo Posted February 22, 2013 at 05:28 PM Report #496663 Posted February 22, 2013 at 05:28 PM estás a receber inteiros (bytes com o valor numérico) ou caracteres alpha-numéricos representativos dos números ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dario1133 Posted February 22, 2013 at 05:30 PM Author Report #496664 Posted February 22, 2013 at 05:30 PM inteiros (bytes com o valor numérico)
HappyHippyHippo Posted February 22, 2013 at 05:34 PM Report #496666 Posted February 22, 2013 at 05:34 PM (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 February 25, 2013 at 02:51 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dario1133 Posted February 25, 2013 at 02:40 PM Author Report #496941 Posted February 25, 2013 at 02:40 PM Não está a funcionar, diz sempre que são iguais mesmo não sendo!
pmg Posted February 25, 2013 at 02:49 PM Report #496942 Posted February 25, 2013 at 02:49 PM (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 February 25, 2013 at 02:50 PM 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!
HappyHippyHippo Posted February 25, 2013 at 02:51 PM Report #496943 Posted February 25, 2013 at 02:51 PM tinha um erro no código que apresentei : faltava comparar o resultado da chamada da função com 0 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dario1133 Posted February 25, 2013 at 03:25 PM Author Report #496944 Posted February 25, 2013 at 03:25 PM 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;
HappyHippyHippo Posted February 25, 2013 at 05:20 PM Report #496955 Posted February 25, 2013 at 05:20 PM 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 Portugol Plus
dario1133 Posted February 26, 2013 at 04:58 PM Author Report #497093 Posted February 26, 2013 at 04:58 PM Mesmo assim não funciona. Em vez do memcpy não será memcmp? Mesmo assim experimentei e não identifica a igualdade!
HappyHippyHippo Posted February 26, 2013 at 05:06 PM Report #497096 Posted February 26, 2013 at 05:06 PM sim, tens razão, sempre se falou do memcmp e escrevi memcpy por distracção. agora vamos ao que interessa : ou apresentas o código que tens ou nunca terás uma resposta concreta, isto porque ainda não é claro qual é a informação que que estás a processar ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
dario1133 Posted February 27, 2013 at 03:25 PM Author Report #497269 Posted February 27, 2013 at 03:25 PM 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; } }
Carlos7 Posted February 27, 2013 at 03:37 PM Report #497271 Posted February 27, 2013 at 03:37 PM Aplicação em java e estás a programar em C?
HappyHippyHippo Posted February 27, 2013 at 03:50 PM Report #497273 Posted February 27, 2013 at 03:50 PM 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 Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now