|
CPP911 wrote: I found in some postings the data types "BYTE" and "DWORD". Can someone tell me in what library they can be found if any?
You can find them in windef.h .
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
They are defined in <windef.h> but you only need to include <windows.h> if you want to use them as it includes <windef.h>.
Steve
|
|
|
|
|
Hi all,
I have found myself totaly confused yet again. I need to convert a 32bit int to a double. Well the docs say "an IEEE 754 floating-point value (64bit double precision). It then goes on to demonstarte the before and after (without any code).
0x3FF00000 -> (Decoded value) 0x3FF0000000000000 -> (Result) 1.0 'decimal'
I have managed to find some examples on the net, but unfortunatly none of them are in C/C++. Here is a C# method:
double ToDouble(int n){
byte[] doubleBytes = new byte[8];
byte[] uintBytes = BitConverter.GetBytes(n);
Array.Copy(uintBytes, 0, doubleBytes, doubleBytes.Length - uintBytes.Length, uintBytes.Length);
return BitConverter.ToDouble(doubleBytes, 0);
} I hope somebody can help me with the answer, I am totaly stuck. Thankyou.
|
|
|
|
|
OK, so the naive dumb question first : Why is this not working :
int i=3;
double d=(double)i;
~RaGE();
|
|
|
|
|
When I apply that to the given example 0x3FF00000, instead of getting 1.0 I get back 1072693248.0000000. Which is well away from what I want.
|
|
|
|
|
Sorry, I must miss something:
3FF00000(hex) = 1072693248(dec), so why should 3FF00000(hex) be equal to 1.0 ?
~RaGE();
|
|
|
|
|
Thats exactly why I am so confused. The 32bit int value comes from a byte array, and it is supposed to represent a number. There is a flag which indicates whether the int is an int or a float. I can convert the int, but I am totally lost while trying to convert to a float.
An RK value is an encoded integer or floating-point value.
RK values have a size of 4 bytes and are used to decrease file size for floating-point values.
If bit 1 is cleared, the encoded value represents the 30 most significant bits of an IEEE 754
floating-pointvalue (64-bit double precision). The 34 least significant bits must be set
to zero. If bit 1 is set, the encoded valuerepresents a signed 30-bit integervalue. To get
the correct integer,the encoded value has to beshifted right arithmeticaly by 2 bits. If bit0
is set, the decoded value(both integer and floating-point)must be divided by 100 to get thefinal
result. I am able to convert the value to an integer, but this text just doesn't explain enough for me.
-- modified at 15:32 Tuesday 18th April, 2006
|
|
|
|
|
Here is a very non optimal way (the shift can be replaced with a copy):
Take the 32bit # and mask off the lowest two bits. Then store it in a 64 bit integer __int64. Then left shift the integer by 32 bits. Then declare a double* and give it the address of the integer. Then declare a double and set it to the value that the double* (above) points to. Now if bit 0 of the first # is 1 divide the double by 100...
int code;
__int64 temp=(code & 0xFFFFFFFD);
temp << 32;
double* pFloat = (double *)temp;
double ans = *pFloat;
if (code & 1) ans /= 100.0;
John
-- modified at 16:20 Tuesday 18th April, 2006
|
|
|
|
|
Thankyou John,
Your suggestion worked a treat.
rk <<= 2;
__int64 *buf = new __int64;
*buf = rk;
*buf <<= 32;
double* dub = (double *)buf;
val = *dub;
|
|
|
|
|
Please check my code again as I have updated it because I forgot the last rule about dividing by 100.
John
|
|
|
|
|
You wouldn't beleive it, but it has taken me nearly all day to get this one little function working correctly. I just hope it will all be worth the effort.
Thanks again.
|
|
|
|
|
Your welcome, glad I could help...
John
|
|
|
|
|
Geez, I ended up with exactely the same code BUT for the mask that was wrong (masking only one bit and not two...).
That was a very interesting question, thanks for sharing it.
~RaGE();
|
|
|
|
|
The cast from int to double is implicit. i.e.
int i=3;
double d = i;
Steve
|
|
|
|
|
|
Michael Dunn wrote: FYI this belongs in the C# forum[^]
Why on earth would I want to put a C++ question in the C# forum? Please re-read my thread, I stated that I could only find a C# example of what I wanted to do. I added the function with the offchance that one of the C++ gurus here would understand it and know a way to convert it to C++.
Also if you read the repies to my initial post, you should notice there is nothing C# about them. All the code and examples are pure C++.
|
|
|
|
|
Hi,
In my (MFC) application, I would like to let the user configure his toolbars (add/remove buttons, associate custom bitmaps/commands with the buttons he adds). I have no idea as where to start. I know how to use a normal CToolBar , but with a fixed amount of buttons and an imagelist with the right size, and with the event handlers associated to each button. But how do we do that dynamically ?
~RaGE();
|
|
|
|
|
<thinking aloud>
I create a CToolBar object for each toolbar I want my user to customize. I have a .bmp where I stock every bitmap he may use to put on the button he wants to insert. For adding a button, I simply get the CToolBarCtrl control from the associated CToolBar and use the AddButton command.
Is this OK ?
I suppose that I need to map the IDs of the created buttons to commands, and that I will have to handle them in the OnCommand handler. Or is there any better way ?
</thinking aloud>
~RaGE();
-- modified at 15:22 Tuesday 18th April, 2006
|
|
|
|
|
I write a Application in form "Dialog" use menus.
I want to display "checked sign" when user click left mouse on that menu by using this code :
void CMTCaroDlg::OnUpdateOptionPlayoverlan(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(TRUE);
}
But when i run the Application, no thing to change !!!
Why ???
Help me please !!!
Lgx
|
|
|
|
|
this kind of handles are invalid for dialog.
u need to check it yourself by CheckMenuItem() function.
A special image tool for C++ programmers, don't miss it!
The world unique Software Label Maker is here for you and me ...
A nice hyper tool for optimizing your MS html-help contents.
|
|
|
|
|
|
How does use it ???
Help me please !!!
|
|
|
|
|
The update command UI system doesn't run for dialogs unless you add message handler for WM_KICKIDLE and start the update process from there. Google for WM_KICKIDLE and you should find many pages on what to do
--Mike--
Visual C++ MVP
LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ
|
|
|
|
|
I am developing a directshow filter, but there is something wrong when running this filter. I know GraphEdit can be used to test the filter, but how to debug the filter step by step by setting breakpoint? Thanks.
|
|
|
|
|
Go to Project properties->Configuration Properties->Debugging in VS and set "Command" to the
path of your graphedit.exe. Then it starts automatically when you start debugging your filter.
In debugging mode you can step through your code by loading and starting your filter in graphedit, if you have properly registered the debug dll/ax with regsvr32.
|
|
|
|