|
Hi,
I have to convert a string which is representating a hex number (e.g. "FE34") into a string which displays the decimal number ("65076"). Because the length of number may be upto 1000 (byte array) I cannot use a sscanf/sprintf methods.
Any ideas how I can solve the problem?
Best Regards
Heiko
|
|
|
|
|
char *s = "FE34", ch;
double dwNUM = 0;
while(*s != NULL)
{
ch = (char)*s;
dwNUM *= 16;
switch(ch) {
case '0':
dwNUM += 0;
break;
case '1':
dwNUM += 1;
break;
case '2':
dwNUM += 2;
break;
case '3':
dwNUM += 3;
break;
case '4':
dwNUM += 4;
break;
case '5':
dwNUM += 5;
break;
case '6':
dwNUM += 6;
break;
case '7':
dwNUM += 7;
break;
case '8':
dwNUM += 8;
break;
case '9':
dwNUM += 9;
break;
case 'A':
dwNUM += 10;
break;
case 'B':
dwNUM += 11;
break;
case 'C':
dwNUM += 12;
break;
case 'D':
dwNUM += 13;
break;
case 'E':
dwNUM += 14;
break;
case 'F':
dwNUM += 15;
break;
default:
break;
}
s++;
}
|
|
|
|
|
Don't forget to uppercase the string or check for lowercase 'a' to 'f'
"An education isn't how much you have committed to memory, or even how much you know. It's being able to differentiate between what you do know and what you don't." - Anatole France
|
|
|
|
|
|
You don't need the large switch statement.
char *s = "FE34", ch;
double dwNUM = 0;
while (*s != NULL) {
ch = (char) *s;
dwNUM *= 16;
if ((ch > '0') && (ch <= '9'))
dwNum += (ch - '0');
else {
ch = tolower (ch);
if ((ch > 'a') && (ch <= 'f'))
dwNum += (ch - 'a' + 10);
}
s++;
}
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
yes, you are right, but I just made a small demo to show how to do, what he wants. Like your demo, which says:
if ((ch > 'a') && (ch <= 'f'))
instead of
if ((ch ><code>=</code> 'a') && (ch <= 'f'))
;)
http://www.priyank.in/
|
|
|
|
|
|
Ravi Bhavnani wrote:
No. Why add zero?
Its not zero, its ten, please check again on inputs "AAA".
http://www.priyank.in/
|
|
|
|
|
No, you're wrong. See my code.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Ravi Bhavnani wrote:
No, you're wrong.
Have you tried with inputs "AAAA". What answer you get?
http://www.priyank.in/
|
|
|
|
|
Aaaaaaaaaaaaaaaargh! I need to go to sleep (and never wake up). Of course you're right.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Thanks for your suggestion. But for very long hex strings (e.g. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") the floating point value is truncated. So if I want to switch vom DEC to HEX and vica versa I get other values. Am I right?
|
|
|
|
|
Didn't get you, floating point values get terminated? this will work on the string you are talking about:
Heiko Gschwind wrote:
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
and will get a decimal value of: 2.4942961277114075e+050.
I guess this should be right.
http://www.priyank.in/
|
|
|
|
|
Ok, we get value 2.4942961277114075e+050.
But have you tried to 'increment' the string
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
to
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB"?
I think you will get value 2.4942961277114075e+050 too. So I can't distinguish the two values.
|
|
|
|
|
|
It's very easy to convert the Decimal format to Hexadecimal and viceversa using very simple C Runtime Function like
_ttot (convert long to string) and _ttol (convert string to long)
Now let look at code :-
From HEX String to DEC String
TCHAR tcsDEC[20];
_itot(_ttol(_T("FE34")),tcsDEC,10);
From DEC String to HEX String
TCHAR tcsDEC[20];
_itot(_ttol(_T("65076")),tcsDEC,16);
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
|
|
|
|
|
TCHAR tcsDEC[20];
_itot(_ttol(_T("FE34")),tcsDEC,10);
_ttol (convert string to long) function only converts decimal number string to long. So, your solution will not work! (Case of converting hexadecimal string to decimal string for large arrays.)
http://www.priyank.in/
|
|
|
|
|
Priyank Bolia wrote:
Case of converting hexadecimal string to decimal string for large arrays.)
Yes, You are right Mr Priyank. Thanks for Correcting me.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
|
|
|
|
|
Are you saying that the length of the base-16 number can be up to 1000 characters? If so, that is something like 24000 in base-10. I'm not sure you're going to find a type that will hold such a large number.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Your are right. It will be hard to find such a number.
I thought there may be a possibility to convert the string on the fly without storing the whole number.
|
|
|
|
|
Heiko Gschwind wrote:
I thought there may be a possibility to convert the string on the fly without storing the whole number.
Yes, converting a base-16 string to a base-10 string is certainly feasible.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Is there a simple way (newbie), to find out if IE has finished loading? I am using VC .NET. I start IE with CreateProcess.
|
|
|
|
|
You need to handle the Browser events to acheive this.
Regards
Abhi Lahare
|
|
|
|
|
You should create a browser helper object, and handle the DOCUMENT_COMPLETE event.
Isn`t really simple, but there are a lot of examples in the web
|
|
|
|
|
:-DI am using MDI architecture wherein I need to scroll the MDI Child windows manually by dragging the scroll bars and using the Mouse Wheel.
For setting the horiz. & vert. scrolls in my child views, I have used the foll.
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
cs.style = WS_CHILD|WS_OVERLAPPEDWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_SIZEBOX|WS_VSCROLL|WS_HSCROLL;
//cs.dwExStyle = WS_EX_RIGHTSCROLLBAR;
return TRUE;
}
*******************************************************************
So both the scrolls are visible. But iam not able to scroll the view by dragging the scrolls manually.
In order to implement MouseWheel i have defined the following.
*********************************************************************
BOOL CKolOSDBuilderView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
CPoint devPos;
devPos = GetDeviceScrollPosition();
if (zDelta < 0)
SetScrollPos(SB_VERT, devPos.y + m_panelVer / 10, TRUE);
else
SetScrollPos(SB_VERT, devPos.y - m_panelVer / 10, TRUE);
// this->ScrollWindow(devPos.x,devPos.y,
InvalidateRect(0); // Redraw
return CView::OnMouseWheel(nFlags, zDelta, pt);
}// EOF OnMouseWheel()
The handler is invoked but the scroll positions remain unchanged.
laiju
|
|
|
|