|
Your code is correct as far as the conversion goes. The problem is that it can not handle any binary value greater than 31. You need to calculate the number of digits in the converted value first, and create an array big enough to store the string.
|
|
|
|
|
Thanks Richard MacCutchan I will Try this.
|
|
|
|
|
As noted in other answers, your code handles at most four bits.
Moreover, your function is assuming a (at least) 5-bytes buffer is provided by the caller. That's a flawn: the caller should provide the size of the buffer and the called should check if the size is big enough to produce the requested output.
Try
#include <stdio.h>
#include <stddef.h>
#include <stdbool.h>
bool uint2binstr(unsigned value, char output[], size_t output_size)
{
unsigned v = value;
unsigned bits = 0;
while ( v )
{
v >>= 1;
++bits;
}
if ( ! bits ) ++bits;
if ( output_size > bits )
{
output[bits] = '\0';
while (bits)
{
--bits;
output[bits] = (value & 1) + '0';
value >>= 1;
}
return true;
}
return false;
}
enum { N = 33 };
int main()
{
char out[N];
unsigned a[] = { 0, 1, 128, 192, 65535, 65536, -1 };
for (size_t n=0; n<sizeof(a)/sizeof(a[0]); ++n)
{
if ( uint2binstr(a[n], out, N) )
{
printf("success: '%u' decimal is '%s' binary\n", a[n], out);
}
else
{
printf("failed to represent '%u' in binary\n", a[n]);
}
}
return 0;
}
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
Well explained. Thank You!
|
|
|
|
|
You are welcome.
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
You have updated your question, but it is not clear what has changed since yesterday when we gave you the answer.
|
|
|
|
|
Hello everyone, new to programming and algorithms, I have an obligation to respond to a project.
That of creating a grid in which there is a prey/predator system. The beginning is to initialize the structures of the 3 elements. We are instructed to create a (dynamic) list to which only the prey and predators entered by the user are added.
I totally don't understand how.
I had the idea of creating a static list and leaving blanks when nothing is there. But our tutor told us that it's heavier and it's better to use a dynamic list rather than a static one.
Thanks for your help.
|
|
|
|
|
The question is not clear. What do you mean by "prey/predator system", what are "the 3 elements"? I know what both of those terms mean, but have no idea what sort of system you are supposed to design. I suggest you go back to your tutor and get a clearer description of what you are supposed to create.
|
|
|
|
|
If the size of the grid is static (m x n ), you can just hard-code it:
enum GridOccupant {EMPTY, PREY, PREDATOR};
GridOccupant Grid[m][n] = {EMPTY}; If the grid is dynamic, the question is whether you're allowed to use things from the Standard Template Library (STL), like std::vector [^], or whether you're supposed to allocate the memory yourself.
When the user specifies the location of Prey or Predator , you create one and add it to PreyAnimals or PredatorAnimals . Again, the question is whether you're allowed to use the STL. Each Animal (the base class for Prey and Predator , if this helps your design) keeps track of its location in the Grid to make it easy to find.
You might discover that you don't need Grid at all, only its dimensions (m x n ).
|
|
|
|
|
Apologies if the description is long; I just want to make the question clear(er).
I have a WIN32 project in which there are some applications and some DLLs that may or may not use a framework. The framework itself is statically linked to apps and DLLs and it has an important data structure that should be unique. Currently, when a DLL is loaded it has no way of knowing if the process in which it was loaded uses the framework and if the data structure has been created or not.
If DLL uses the framework and the EXE doesn't, the DLL can initialize the data structure and all is fine.
If the EXE uses the framework and the DLL doesn't, the EXE will initialize the structure and all is fine again.
The problem appears when both the DLL and the EXE use the framework and only the EXE should initialize the structure and the DLL should just somehow find the address and use the data structure.
I know I could use a shared memory area but this is not inter-process communication so I'd rather use something simpler. I even thought of setting an environment variable with the address of the structure but somehow the solution seems cheesy.
Do you have any suggestion? Is there any standard/better way of doing this?
Mircea
|
|
|
|
|
Couldn't the executable simply call a function of the DLL, passing the address of the data?
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
Thanks for the suggestion but the DLL-EXE API is set in stone. With over 300 DLL modules changing the API is not easy/feasible. I have to find a different solution. I'll probably go with the environment variable; I'll just have to hold my nose while coding
Mircea
|
|
|
|
|
Rather than use the environment variable you could use the Registry.
|
|
|
|
|
Interesting idea! However I would have to take care of cleaning the registry when the app finishes. The environment variable just "evaporates" on exit. Do you see any technical advantage to using the registry?
Mircea
|
|
|
|
|
Delete a registry key or value is very simple.
And (almost) no one else (except your app) would like to change it.
|
|
|
|
|
Is the "framework" API set in stone? It sounds like it should be the one controlling the existence of this structure. You said it was statically linked to both the DLL and the EXE, hence two copies of the library, but you can force it to use a single shared memory location to hold this structure's pointer. Both the DLL and the EXE would ask the framework for a pointer and the framework would use some sort of mutual exclusion / atomic operation to synchronize its access to the shared memory location to either allocate or use the existing structure.
Be wary of strong drink. It can make you shoot at tax collectors - and miss.
Lazarus Long, "Time Enough For Love" by Robert A. Heinlein
|
|
|
|
|
JudyL_MD wrote: It sounds like it should be the one controlling the existence of this structure. Absolutely right.
JudyL_MD wrote: the framework would use some sort of mutual exclusion / atomic operation Key words here are "some sort of". That was the purpose of my question to ask for recommendations for "some sort of" mechanism
Mircea
|
|
|
|
|
The first thing that pops into my head is to force the EXE and DLL to make their initial framework calls from separate threads and have the framework use a named mutex. Not elegant spawning a thread just to make a single function call and immediately waiting for that thread to finish, but it would work.
Be wary of strong drink. It can make you shoot at tax collectors - and miss.
Lazarus Long, "Time Enough For Love" by Robert A. Heinlein
|
|
|
|
|
I'm certainly no expert at COM, but this sounds like the kind of situation where it would be a good fit.
|
|
|
|
|
I would have used a (third) dll for the (static) "data structure"; the equivalent of a "data repository".
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
how to create a button in mfc dialog
and drag and drop the button or any control in the same dialog.
please answer with complete MFC code.
by
gopal
|
|
|
|
|
|
Member 14869339 wrote: how to create a button in mfc dialog
and drag and drop the button or any control in the same dialog.
Do you mean the dialog resource editor or you'd like to "drag and drop" existing controls within your running application?
|
|
|
|
|
i mean, create a button or checkbox dynamically on MFC dialog window(not sdi or mdi) and drag and drop that button on the same dialog.(dialog is main window).
thanks in advance.
|
|
|
|
|
If you create it dynamically that means you already control where it is positioned. So what do you hope to achieve with drag and drop?
|
|
|
|