Bueno, amigo xootraoox, vamos a ver si soy capaz de explicarme claramente para que puedas completar tu desarrollo con éxito:
Tal como está escrito este programa, y como muy bien dices en tu post, en la variable
arg recibo los
argumentos que acompañan al comando correspondiente.
En tu ejemplo mandas los carácteres
A127[newline][return] o lo que es lo mismo los valores hexadecimales
0x5C 0x41 0x31 0x32 0x37 0x0D 0x0A cosa que corresponde al comando
A con el argumento
127 teniendo en cuenta que 127 representa un
entero.
Pero,
y este pero es importante, tú no mandas el entero 127 sino que envias la representacion del mismo mediante un string, una cadena, de tres caracteres ASCII consecutivos, el 1 (0x31) el 2 (0x32) y el 7 (0x37)
Así en
arg lo que realmente tienes es [0x31][0x32][0x37][0x00] que es un string estándar de C acabado en .
Hacer la asignación que haces de una variable de tipo entero directamente igual a una de tipo string solo puede dar un resultado indefinido.
Lo que ahora hay que realizar es la conversión de un string cuyo contenido es la representación ASCII de un valor entero a su valor entero.
Para ello me voy al Reference Manual del CCS-C y en la página número 66, como el mago que saca el conejo de su chistera, encuentro:
Codigo:
ATOI( )
ATOL( )
ATOI32()
Syntax: ivalue = atoi(string) or lvalue = atol(string) or i32value = atoi32(string)
Parameters: string is a pointer to a null terminated string of characters.
Returns: ivalue is an 8 bit int.lvalue is a 16 bit int. i32value is a 32 bit int.
Function: Converts the string pointed too by ptr to int representation. Accepts both decimal and hexadecimal argument. If the result cannot be represented, the behavior is undefined.
Availability: All devices.
Requires: #include <stdlib.h>
Examples:
char string[10];
int x;
strcpy(string,"123"
x = atoi(string);
// x is now 123
Así que ya sabes:
1º coloca arriba del todo de tú codigo el
#include <stdlib.h>2º el codigo que has escrito quedaría así:
valor=atoi(arg);y 3º compila, prueba y me cuentas.