Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Pregunta tonta de novato (sprintf)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Pregunta tonta de novato (sprintf) Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Re: Pregunta tonta de novato (sprintf) Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

O sea, con quiero trabajar con "0e", si no con un 101. Qué lio.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.