|
This string contains 32 hexadecimal digits. So may represent 16 bytes, as well 8 shorts, as well 4 int.
If you need to convert it into an array of bytes (unsigned char) try something similar to:
#include <stdio.h>
void main()
{
char hash[] = "df310c24eb35eee2af4f83bed8bee284";
char * p = hash;
const unsigned int SIZE = (sizeof(hash)-1)/2;
unsigned char arr[SIZE];
unsigned int count=0;
while (count < SIZE)
{
if (sscanf(p, "%2x", &arr[count]) != 1)
{
}
count++;
p+=2;
}
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
hi everyone who reads this,
i am in a digital electronics class and i decided to write a program that converts decimals to binary, i thought this was going to be simple and it was till i realized my my loop cout'ed the binary in reverse order. 731 in dec = 1011011011 and my program did it in reverse 1101101101 i used int's with modulus and division operators:
while (num)
{
rem=num%2;
num = num/2;
cout << rem;
}
so i was wondering is there a simple way to reverse the output or could the division be done in reverse so the last output is first and the first last in my program? please note i am a beginner at c++ so i don't know how to do arrays as of yet and i am sure the output could be loaded into an array and printed in reverse order.
thank you in advanced for any help.
|
|
|
|
|
You should go in the opposite way, using multiplication (or bit shif, that is faster):
#include <iostream>
using namespace std;
void main()
{
unsigned int k = 731;
unsigned int b;
const int SIZE = sizeof(k) << 3;
const unsigned int MSB = 1 << (SIZE-1);
for (b=0; b<SIZE; b++)
{
cout << (( MSB & k) ? 1 : 0);
k <<= 1;
}
cout << endl;
}
Or
#include <iostream>
using namespace std;
void main()
{
unsigned int k = 731;
unsigned int b;
const int SIZE = sizeof(k) << 3;
const unsigned int MSB = 1 << (SIZE-1);
bool isLeadZero= true;
for (b=0; b<SIZE; b++)
{
if ( MSB & k)
{
isLeadZero = false;
cout << 1;
}
else
{
if ( ! isLeadZero) cout << 0;
}
k <<= 1;
}
cout << endl;
}
If you need to remove heading zeroes.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
i just tried your code and it works very well, there is one thing, i just cant seem to understand how it works line by line, since i want to learn c++ i think it wise to at least understand how it works, could you explain how your code outputs so many leading zero's, i find that very interesting.
|
|
|
|
|
In order to obtain the correct result (i.e. reversed bits) using your method, you need to multiply instead of dividing. At every iteration you have to:
- Test the most significative bit of the number.
- miltiply the number by two, so that the most significative bit is replaced by its adjacent one (the next you'll test).
In my code I replaced multiplication by 2 with left shift that is faster.
Dealing with MSB (most significative bit) is a little trcky since its position depends on the data type, i.e. it is bit 7 for unsigned char s, bit 15 for 2 -byte data types (like short on my machine) and bit 31 for 4 -byte data types (like unsigned int on my PC) hence the 'messy' lines in my routine, for instance:
const int SIZE = sizeof(k) << 3; Here SIZE is set to the length, expressed in bits, of k (sizeof operator returns bytes, I multiply by 8 using, again, left shift operator).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
thank you very much, i will play with this code and see what i can do with this new information.
you said you multiplied by 8, but i see only 3 could you explain this, if it was a typo then never mind
|
|
|
|
|
You are welcome.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
i figured out what you meant by multiply by 8, it would be 2^3 which is 8 and what i seen in your code was 3. it seems this is a cool way to multiply and divide
i hope this thread helps someone else learn something new as i did, thanks
|
|
|
|
|
There are many ways to do this. To use what you already have, add:
char s[128] = { '\0' };
int x = 0;
while (num)
{
s[x] = (num & 1) ? '1' : '0';
num = num / 2;
x++;
}
cout << strrev(s) << endl;
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
its funny i was reading about arrays today and ways to reverse the output, had nothing yet, but i did learn how to make an array. what header files did you use? when i compile your modification to my code i get an unrecognizable output.
thank you.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
char s[128];
int x = 0;
int num =53
while (num)
{
s[x] = (num & 1) ? '1' : '0';
num = num / 2;
}
cout << strrev(s) << endl;
system("pause");
return 0;
}
|
|
|
|
|
Have you used the debugger to step through the code watching s and num ?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
i haven't looked at the debugger messages, maybe i should, but as a beginner i may not even know what i am seeing so i will look into this. thanks
|
|
|
|
|
HI
Would U plz help me with this Code
I cant find the Error !!
here's the Question:-http://uva.onlinejudge.org/external/1/136.html[^]
here's the code .. "that shows a wrong output"
#include<iostream>
#include<list>
using namespace std;
int main ()
{
int uglylist[1500];
uglylist[0]=1;
int maximum;
int max2=0;
int max3=0;
int max5=0;
for(int i = 1; i<1500; i++)
{
maximum =uglylist[i-1];
for(int j=0;j<=i;j++)
{
if (uglylist[i]>max2)
{
max2=uglylist[j]*2;
break ;
}
if (uglylist[i]>max3)
{
max3=uglylist[j]*3;
break ;
}
if (uglylist[i]>max5)
{
max5=uglylist[j]*5;
break ;
}
uglylist[i]=min(max2,min(max3,max5));
}
}
cout<<uglylist[1500-1]<<endl;
}
So Would U plz help ?
|
|
|
|
|
Would U plz do your own homework?
|
|
|
|
|
well actually i didnt ask u to do it for me
& i guess u can c that i've already written the code
if u can help .. just do it
else :- dont come to disturb my post !!
|
|
|
|
|
anollipian wrote: i've already written the code
No. You have written some code, however your algorithm is flawed.
Luc Pattyn
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
|
|
|
|
|
anollipian wrote: So Would U plz help ?
Have you used the debugger to step through the code? Narrow the problem down from 1,500 to something more manageable.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Hi,
I have got 2 errors one saying:
this line contains a '{' which has not yet been matched
end of file found before the left brace '{
<br />
#include <windows.h><br />
<br />
#define WINDOW_WIDTH 903<br />
#define WINDOW_HEIGHT 729<br />
<br />
const char lpClassName[] = "MyProject";<br />
HWND mainWindow;<br />
<br />
LRESULT CALLBACK WindowEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);<br />
<br />
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)<br />
{<br />
WNDCLASSEX wc;<br />
wc.style = CS_VREDRAW | CS_HREDRAW;<br />
wc.lpszMenuName = NULL;<br />
wc.lpszClassName = lpClassName;<br />
wc.lpfnWndProc = WindowEvent;<br />
wc.hInstance = hInstance;<br />
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);<br />
wc.hCursor = LoadCursor(NULL, IDC_ARROW);<br />
wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);<br />
wc.cbWndExtra = 0;<br />
wc.cbSize = sizeof(wc);<br />
wc.cbClsExtra = 0;<br />
<br />
<br />
RegisterClassEx(&wc);<br />
<br />
mainWindow = CreateWindowEx(<br />
NULL,<br />
lpClassName,<br />
"My Project",<br />
WS_OVERLAPPEDWINDOW | WS_VISIBLE,<br />
0,<br />
0,<br />
WINDOW_WIDTH,<br />
WINDOW_HEIGHT,<br />
NULL,<br />
NULL,<br />
hInstance,<br />
NULL<br />
);<br />
<br />
if (!mainWindow)<br />
return 0;<br />
<br />
UpdateWindow(mainWindow);<br />
<br />
MSG msg;<br />
<br />
while (1)<br />
{<br />
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))<br />
{<br />
if (msg.message == WM_QUIT)<br />
<br />
TranslateMessage(&msg);<br />
DispatchMessage(&msg);<br />
}<br />
<br />
<br />
return (int) msg.wParam;<br />
}<br />
LRESULT CALLBACK WindowEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br />
{<br />
switch (message)<br />
{<br />
case WM_DESTORY:<br />
PostQuitMessage(0);<br />
return 0;<br />
break;<br />
<br />
<br />
return DefWindowProc(hWnd, message, wParam, lParam);<br />
}<br />
<br />
<br />
Andrew McIntyre
|
|
|
|
|
you need to close the { in that last switch
|
|
|
|
|
You also forgot to close braces after while(1)
(add another after the translate,dispatch pair)
|
|
|
|
|
Could you show me on the code where to place the { symbol as I am kinda struggling to locate it.
If you can create quick snippet of the part of the code so I can just copy that fix into my source code.
Thanks
Andrew McIntyre
|
|
|
|
|
Sure thing.
There's actually another one that neither of us mentioned yet too - you mean WM_DESTROY, not WM_DESTORY
Substitute part of your code for this:
while (1)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
LRESULT CALLBACK WindowEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
There's other things amiss too, though this will give you a window that opens.
|
|
|
|
|
Thanks very much you guy's. Its much appreciated.
Andrew McIntyre
|
|
|
|
|
If you are using VS6, click Ctrl+] to locate matching braces (which will indirectly show you unmatched braces). I know there's a similar way in VS200x, but I don't know it off the top of my head.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
I've seen functions defined as:
int SetIniString(int nConfigSet, char *Section, char *Key, const char *format, ... );
Could someone explain what the '...' in the parameter list means and does?
|
|
|
|