• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 602
  • Last Modified:

unsigned int to string binary

Sorry for my bad english.

static unsigned int number = 256;
static char FW[20];

How to get a binary string ? like FW = "0000 000100000000"

Thanks
0
Ludde72
Asked:
Ludde72
  • 5
  • 3
1 Solution
 
ZoppoCommented:
Hi Ludde72,

you can use 'itao' to do this - it's done for 'int', but you can cast the 'unsigned int' to 'int' so it shouldn't make a difference. The char array you need should be of length 33 to make sure all 32 bits plus the terminating zero char fit into it.

Example:

static unsigned int number = 256;
static char FW[33];
itoa( number, FW, 2 );

Open in new window


Hope that helps,

ZOPPO
0
 
ZoppoCommented:
BTW, I forgot to ask: it the space in '0000 000100000000' from your posted sample wanted or a typo?
0
 
Ludde72Author Commented:
Sorry it was a typo.

Thanks
0
Firewall Management 201 with Professor Wool

In this whiteboard video, Professor Wool highlights the challenges, benefits and trade-offs of utilizing zero-touch automation for security policy change management. Watch and Learn!

 
ZoppoCommented:
No problem ...
0
 
Ludde72Author Commented:
Can't find itoa, is it ansi c ?, I'm using Labwindows (Watcom).

Thanks

// Ludde

0
 
ZoppoCommented:
No, sorry, unfortunateley itoa is not ANSI C but comes with most C/C++ compilers.

But samples can be found in the internet how it can be implemented - I found some here: http://www.jb.man.ac.uk/~slowe/cpp/itoa.html

I tested one and found it seems to work fine:

void strreverse( char* begin, char* end )
{
	char aux;

	while( end > begin )
	{
		aux=*end, *end--=*begin, *begin++=aux;
	}
}

void my_itoa( int value, char* str, int base )
{
	static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
	char* wstr = str;
	int sign;

	// Validate base
	if ( base < 2 || base > 35 )
	{
		*wstr='\0';
		return;
	}

	// Take care of sign
	if ( ( sign = value ) < 0 )
	{
		value = -value;
	}

	// Conversion. Number is reversed.
	do
	{
		*wstr++ = num[ value % base ];
	} while( value /= base );

	if( sign < 0 )
	{
		*wstr++ = '-';
	}

	*wstr='\0';

	// Reverse string
	strreverse( str, wstr-1 );
}

Open in new window



Hope that helps,

ZOPPO
0
 
Ludde72Author Commented:
The code works fine, but i need to fill out wiht zero's.

FW = 0000000100000000

not FW = 100000000

Thanks

// Ludde

0
 
ZoppoCommented:
Hi again,

sorry for late response, but I just arrived my PC at work ...

Here you can see a simplified version of the above posted function which converts and unsigned int to a binary string:

char* my_itoa2( unsigned int value )
{
	int len = 32;
	static char str[33];
	static char num[] = "01";
	char* wstr = str;

	// Conversion. Number is reversed.
	while( --len > 0 )
	{
		*wstr++ = num[ value % 2 ];
		value /= 2;
	}

	*wstr='\0';

	// Reverse string
	strreverse( str, wstr-1 );

	return str;
}

Open in new window


Warning: This code isn't thread safe since it uses static char array - if you need it thread safe it need's to be modified in a way it gets passed a char array ...

ZOPPO
0
 
evilrixSenior Software Engineer (Avast)Commented:
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
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.

Join & Write a Comment

Featured Post

Turn Raw Data into a Real Career

There’s a growing demand for qualified analysts who can make sense of Big Data. With an MS in Data Analytics, you can become the data mining, management, mapping, and munging expert that today’s leading corporations desperately need.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now