orange_juice
asked on
the format specifier for sprintf
I'm using sprintf(string,"%x",number ) on a string to be displayed by a CStatic control.
where number is an int
can i display it in binary format? I don't find any binary specifier in the help ( i remember in Turbo C i have a %b specifier---something like that)
i mean i want to display a 2 as 10 in binary format, but not hexadecimal, octal or anythig else
where number is an int
can i display it in binary format? I don't find any binary specifier in the help ( i remember in Turbo C i have a %b specifier---something like that)
i mean i want to display a 2 as 10 in binary format, but not hexadecimal, octal or anythig else
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Convert the number to binary before you put it in the string. That should be easier!
> for this you can use _itop function with argument 'radix' = 2,
I think that was supposed to be "_itoa". :)
> Convert the number to binary before you put it in the string.
Gonna love to hear the details on that one! :)
-=- James.
I think that was supposed to be "_itoa". :)
> Convert the number to binary before you put it in the string.
Gonna love to hear the details on that one! :)
-=- James.
Here is a sample copied directly from the MS 16-bit compuler help file. As 'Zoppo' meant and as 'jtwine' corrected, use _itoa():
/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes.
*/
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;
_itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s\n", i, buffer );
_itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
_itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s\n", i, buffer );
_ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 16): 0x%s\n", l, buffer );
_ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul, buffer );
}
/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes.
*/
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;
_itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s\n", i, buffer );
_itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
_itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s\n", i, buffer );
_ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 16): 0x%s\n", l, buffer );
_ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul, buffer );
}
yes, sorry, a typo...
BTW, Kevin_Elrod, what exactly do you mean with 'Convert the number to binary before you put it in the string.'?
BTW, Kevin_Elrod, what exactly do you mean with 'Convert the number to binary before you put it in the string.'?
I must be way off, given the comments I've generated, but
what about this
str mybinary("01000010");
what about this
str mybinary("01000010");
Kevin_Elrod, what should 'str' be? And what should it help to hardcode a string
which contains a binary number?
which contains a binary number?
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
Okay, I spoke too soon.
And, maybe, too often ;-)
Bad Refresh, Bad! Now go sit in the corner, you bad Refresh, you! :P
---
> And what should it help to hardcode a string which contains a binary number?
Many people do things that seem weird. Maybe the OP has his/her reasons...
> str mybinary("01000010");
If "str" is some kind of string object, then you have a string that contains "01000010", but you would still need to get the value of 66 converted to "01000010".
Besides, OJ's question has already been answered: _itoa with a Radix of 2 will convert a integer value to a binary string suitable for display.
-=- James.
---
> And what should it help to hardcode a string which contains a binary number?
Many people do things that seem weird. Maybe the OP has his/her reasons...
> str mybinary("01000010");
If "str" is some kind of string object, then you have a string that contains "01000010", but you would still need to get the value of 66 converted to "01000010".
Besides, OJ's question has already been answered: _itoa with a Radix of 2 will convert a integer value to a binary string suitable for display.
-=- James.
A minor embellishement to the already complete answers...
It is common to need to display binary numbers in increments of eight digits. If that is your need, try:
char buf[33]; // long enough for 32-bit number!
itoa( n, buf, 2 );
sprintf( str,"%08.8s", buf ) ; // eight bits
sprintf( str,"%016.16s", buf ) ; // sixteen bits
-=-=-=-=-=
or use this seldom-used idiom to set the width programmatically:
int nwidth= 8;
sprintf( str,"%0*.*s",nwidth,nwidth , buf ) ;
-- Dan
It is common to need to display binary numbers in increments of eight digits. If that is your need, try:
char buf[33]; // long enough for 32-bit number!
itoa( n, buf, 2 );
sprintf( str,"%08.8s", buf ) ; // eight bits
sprintf( str,"%016.16s", buf ) ; // sixteen bits
-=-=-=-=-=
or use this seldom-used idiom to set the width programmatically:
int nwidth= 8;
sprintf( str,"%0*.*s",nwidth,nwidth
-- Dan
ASKER
wow, there has been lots of answer
i have been outstation, so today only i read all
this
i appreaciate everybody's help
i have been outstation, so today only i read all
this
i appreaciate everybody's help
ASKER
that does the job
thank you to everybody too
how to retain those leading zeros when i use itoa
suppose i want a 000010 gets displayed instead of 10?
i think i should post this again
:)
thank you to everybody too
how to retain those leading zeros when i use itoa
suppose i want a 000010 gets displayed instead of 10?
i think i should post this again
:)
well, as DanRollins mentioned above you can use the string you get from _itoa to create
a result as you want with i.e. sprintf( str,"%08.8s", buf )...
a result as you want with i.e. sprintf( str,"%08.8s", buf )...
... for 8 digits ... for the 000010 which is only 6 digits you can then use sprintf( str,"%06.6s", buf )
ASKER
thank you again
:)
:)