[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