[C con Clase] RESPRESENTACIÓN VALORES HEXADECIMALES
Mariano Demarchi
marchi.hh en gmail.com
Mar Nov 24 16:51:55 CET 2009
Creo que no hay problema, si es lo que entendi..
Supone que tenes que pasarle el valor guardado en
int valor;
char buffer[512]; /* 512 es un poco mucho creo */
int i = 0;
while(valor){
buffer[i] = (char) (valor & 0xFF);
valor >>= 8;
i++;
}
este codigo te descompone valor para que te quede de esta forma
unsigned char buffer[2]={0x12,0x34}
supongo que despues le pasaras buffer a una funcion que te lo pasara a una
cadena representando en hexadecimal los datos que te interesan.
Tambien podrias hacer una funciona que directamente a partir de un int o un
long te de la cadena lista:
Esta funcion la tenia hecha, y deja en buffer, una cadena con la
representacion de a en la base b, en tu caso tendrias que usar b=16
char buffer[512];
int val2b(unsigned long a,int b)
{
int j,i = -1;
char r,swp;
while(a){
i++;
r = a % b;
if(r>=0 && r<=9) buffer[i] = '0' + r;
else if(r>9) buffer[i] = 'A' - 10 + r;
a /= b;
}
buffer[++i] = 0;
return i;
}
Saludos
El 24 de noviembre de 2009 11:09, Susana Sacie <susanitis en gmail.com>escribió:
> Estoy realizado un proyecto con un lector usb para leer datos de un
> pasaporte en visual Studio 2008. En el punto donde estoy tengo que
> transmitir y recibir del lector una serie de bytes en hexadecimal y
> analizar algunos bits. El caso es que con las librerias que proporcina el
> lector transmito y recibo los datos en un array de caracteres .
>
> Si yo espero recibir el valor hexadecimal '0008B1' lo que recibo es:
>
> si tengo seleccionado protocolo ASCII: la cadena "0008B1" //es con el que
> trabajo
>
> si tengo seleccionado protocolo binario: la cadena "00 08 B1"
>
>
>
> la variable que uso de buffer es :
>
> char buffer[512]; //donde cada posición del array almacena 1 carácter
> de los anteriores obviamente.
>
>
>
> Si yo quiero transmitirle el valor ‘3412’ se lo transmito como una cadena
> “3412”.
>
>
>
> El problema viene porque conseguí por Internet código que me está ayudando
> a programar, y cuando tiene que tx algo lo declara de la siguiente forma:
>
> -si queremos tx al pasaporte el valor hexadecimal ‘3412’ lo define de la
> siguiente forma:
>
>
>
> unsigned char buffer[2]={0x12,0x34};// donde vemos que cada posición
> almacena un byte hexadecimal y ordenados de menos significativo a mas
> significativo, byte a byte.
>
>
>
> El problema que tengo es que tengo mucho codigo que trabaja con este
> formato. No entiendo porque todos los valores a tx al lector son declarados
> de esta forma si el lector no puede recibir los datos en ese formato.
>
> No se que hacer porque tengo algoritmos que trabajan sobre un valor
> recibido previamente del lector, pero yo recibo los datos en formato “3412”
> y el algoritmo espera {0x12,0x34}.
>
> muchas gracias por vuestra valiosa ayuda. Si no fuera por ustedes...
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091124/75be57e4/attachment.html>
Más información sobre la lista de distribución Cconclase