| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Sab 04 Oct, 2008 11:25 am Asunto: Pregunta tonta de novato (sprintf) |
|
|
Hola, después de varias horas perdidas mi desesperación es tal que no me averguenza preguntar esto. Si alguien tiene un momento y puede contestarme. Tengo que convertir un int a char pero con formato de dos dígitos. No me sale y he probado 2000 combinaciones, ufffff.
int x=0;
buffer[3];
sprintf(buffer,"%2d",x);
O sea, quiero que en buffer me quede un "00", pero no hay manera. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 04 Oct, 2008 7:55 pm Asunto: Re: Pregunta tonta de novato (sprintf) |
|
|
| rauls66 escribió: | Hola, después de varias horas perdidas mi desesperación es tal que no me averguenza preguntar esto. Si alguien tiene un momento y puede contestarme. Tengo que convertir un int a char pero con formato de dos dígitos. No me sale y he probado 2000 combinaciones, ufffff.
int x=0;
buffer[3];
sprintf(buffer,"%2d",x);
O sea, quiero que en buffer me quede un "00", pero no hay manera. |
Veamos:
sprintf(buffer,"%02d",x);
Saludos, Bosoft. |
|
| Volver arriba |
|
 |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Dom 05 Oct, 2008 7:32 am Asunto: |
|
|
| No, eso ya lo probé y tampoco funcionaba. Me parece que lo que hacía es devolverme un espacio en blanco. O sea : " 0/0". Además, yo sólo quiero que haya un 0 cuando x sea de un dígito. Si es de dos ya no hay problema. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Dom 05 Oct, 2008 7:41 am Asunto: |
|
|
| rauls66 escribió: | | No, eso ya lo probé y tampoco funcionaba. Me parece que lo que hacía es devolverme un espacio en blanco. O sea : " 0/0". Además, yo sólo quiero que haya un 0 cuando x sea de un dígito. Si es de dos ya no hay problema. |
Pues serás al único que no le funciona.
Si x=1 el resultado será 01
si x=11 el resultado será 11
Si x=0 el resultado será 00
Revisa bien el código.
Saludos, Bosoft |
|
| Volver arriba |
|
 |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Dom 05 Oct, 2008 10:57 am Asunto: |
|
|
Bueno realmente a mí no me funciona pero creo que es por otra razón. A ver si me podéis aclarar esto pq no lo acabo de entender. Lo que hace mi programa es recibir en una array la respuesta de un fichero binario desde un equipo conectado por usb. Esta array recibida contiene cierta información que voy reconstruyendo, pero mi problema es cuando tengo que recibir 2 bytes que están en formato hexadecimal y tratarlos como números. Ejemplo:
char totalChannels[2];
myCom->AskBinariBuffer(numChannels, devNumChannels , 10); //llamada para recibir en lista de canales
strcpy(totalChannels, &devNumChannels[3]);//corto de la respuesta *FI a partir de la posición 3
Bien, ahora tengo en totalChannels 2 bytes en formato hexadecimal, con los que tengo que realizar operaciones y no me funcionan correctamente.
//intento convertirlo a int pero no funciona bien
int idxNumChannels = atoi(totalChannels);//convierto char a int
O sea, si en totalChannels tengo un "3045" no sé cómo trabajar con el
como un "0e" entero.
Bueno, no sé si me entendéis un poco. |
|
| Volver arriba |
|
 |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Dom 05 Oct, 2008 10:58 am Asunto: |
|
|
| O sea, con quiero trabajar con "0e", si no con un 101. Qué lio. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Dom 05 Oct, 2008 12:49 pm Asunto: |
|
|
veamos si te he entendido:
Tu recibes 2 bytes en formato hexadecimal (ej 0E) y los colocas en un char[2]. Quieres trabajar con el valor numérico de esos bytes (en el ej 14)
para eso deberás copiar el char en un int con memcpy(&int,&char,2). Piensa que el int deberá ser corto (short int) y el char unsigned, puesto que en windows los ints tienes 4 bytes de tamaño y no 2 como msdos
Creo que adelantarías si los capturaras directamente en un short int.
Saludos, bosoft. |
|
| Volver arriba |
|
 |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Dom 05 Oct, 2008 5:19 pm Asunto: |
|
|
| Bueno, al final me aclaré un poco pero sigo sin hacer lo que quiero. A ver, tengo en una posición de un array un "0e". Al convertirlo a int obtengo el valor ASCII, o sea 101. Pero lo que necesito realmente es un 14. Ahora sí que me he explicado bien. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Dom 05 Oct, 2008 6:54 pm Asunto: |
|
|
por lo que veo recibes en el char los dígitos al revés. Simplemente cámbialos en el char (0E por E0) y los copias al int
Saludos, Bosoft- |
|
| Volver arriba |
|
 |
rauls66 Lt Cmdr

Registrado: 20 Abr 2008Mensajes: 119
|
Publicado: Mar 07 Oct, 2008 7:59 pm Asunto: |
|
|
Bueno, conseguí una función que me convierte el char con datos hexadecimales a un valor entero. No tengo permiso para publicarla abiertamente, pero si alguien está interesado quizá se la puedo enviar.
Saludos. |
|
| Volver arriba |
|
 |
|