En Hi Tech, cuando hago una función a la cual le paso un puntero y sé que no voy a modificar la cadena la defino asíCódigo: C
void WriteStrLcd (const char *palabra)
//Convertir un caracter hexadecimal (0-9 y A-F) en su correspondiente
//valor numérico, de 0 15 (un nibble de 4 bits almacenado en la posición más baja
//del byte devuelto.
//Si el caracter pasado no es hexadecimal la función devuelve 0xFF (255).
//Los caracteres han de estar en mayúsculas.
int8 Hex2Nibble(char c)
{
if( (c >= 'A') && (c<='F') ) {
return 10+c- 'A';
} else if ( (c >= '0') && (c <= '9') ) {
return c- '0';
}
return 0xFF;
}
int8 Hex2Int8(byte *c,int &err)
{
int8 n, valor;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFF;
valor = n<<4;
c++;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFF;
return valor|n;
}
int16 Hex2Int16(byte *c,int &err)
{
int8 n;
int16 valor;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFFFF;
valor = n<<12;
c++;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFFFF;
valor |= n<<8;
c++;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFFFF;
valor |= n<<4;
c++;
n= Hex2Nibble(*c);
err= (n==0xFF);
if( err ) return 0xFFFF;
return valor|n;
}
Variable global:
char comando[16];
Subrutina:
................
char * pos;
pos= comando;
//Leer el ID de la estación, si se produce un error al leerlo, ignorar el comando recibido.
id= Hex2Int8(pos,err);
.............