• Status: Solved
• Priority: Medium
• Security: Public
• Views: 1510

# 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
0
orange_juice
• 11
• 6
• 3
• +3
1 Solution

Commented:
Hi orange_juice,

for this you can use _itop function with argument 'radix' = 2,

hope that helps,

ZOPPO
0

Commented:
Convert the number to binary before you put it in the string.  That should be easier!
0

Commented:
> 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.
0

Commented:
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 );
}
0

Commented:
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.'?
0

Commented:
I must be way off, given the comments I've generated, but

str mybinary("01000010");

0

Commented:
Kevin_Elrod, what should 'str' be? And what should it help to hardcode a string
which contains a binary number?
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
Okay, I spoke too soon.
0

Commented:
And, maybe, too often          ;-)
0

Commented:

---

> 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.
0

Commented:

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
0

Author Commented:
wow, there has been lots of answer
i have been outstation, so today only i read all
this
i appreaciate everybody's help
0

Author Commented:
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

:)
0

Commented:
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 )...
0

Commented:
... for 8 digits ... for the 000010 which is only 6 digits you can then use sprintf( str,"%06.6s", buf )
0

Author Commented:
thank you again

:)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Featured Post

• 11
• 6
• 3
• +3
Tackle projects and never again get stuck behind a technical roadblock.