• Status: Solved
• Priority: Medium
• Security: Public
• Views: 344

can i do this without using an array

#include <iostream>

using namespace std;

int main() {

unsigned char character[4];
cout << "Please enter four ASCII characters: " ;
cin >> character;

int letter = 0 ;
letter = letter | ((int)character[0] << 24);
letter = letter | ((int)character[1] << 16);
letter = letter | ((int)character[2] << 8 ) ;
letter = letter | ((int)character[3]);

cout << " The value as Hex " << hex << letter;

cout << " The letters in reverse order:";

unsigned char numone, numtwo, numthree, numfour;
numone   = (unsigned char)(letter >> 24 );
numtwo   = (unsigned char)(letter >> 16 );
numthree = (unsigned char)(letter >> 8  );
numfour  = (unsigned char)(letter);

cout << numfour << "," << numthree << "," << numtwo << "," << numone ;

return 0 ;
}
0
tedschnieders
• 3
• 2
• 2
• +1
1 Solution

Commented:
Yes, you can:

#include <iostream>
#include <string>

using namespace std;

int main() {

string character;
cout << "Please enter four ASCII characters: " ;
getline(cin, character;);

char* pszCnvEnd = NULL;
int letter = 0 ;

letter = (int) strtol ( character.c_str(), &pcCnvEnd, 16);

//...
0

Software ArchitectCommented:
> unsigned char character[4];
> cout << "Please enter four ASCII characters: " ;
> cin >> character;

This code won't work anyway because you need to reserve one extra character space for ending null-character. Must be:
unsigned char character[5];

jkr's code has a litle bug:
getline(cin, character;);
must be:
getline(cin, character);

There is not significative difference in using char[5] and string, last one is an array too (but encapsulated).
0

Commented:
>>jkr's code has a litle bug:
>>getline(cin, character;);
>>must be:
>>getline(cin, character);

Thanks for pointing that out :o)

#include <stdlib.h>

is necessary and the 'strtol()' line should actually read

letter = (int) strtol ( character.c_str(), &pszCnvEnd, 16);
0

Commented:
Or that:

#include <iostream>

using namespace std;

int main()
{
unsigned char characterF[4];
unsigned char characterR[4];
cout << "Please enter four ASCII characters: " << endl;

for (int i = 0; i < 4; i++)
{
cout << i << "-->";
cin >> characterF[i];
characterR[3-i] = characterF[i];
}
unsigned int letterR = *((unsigned int*)characterR);

cout << " The value as Hex " << hex << letterR ;
cout << " The letters in reverse order:";
cout << characterF[0] << "," << characterF[1] << "," << characterF[2] << "," << characterF[3] ;

return 0 ;
}

(tested)

Regards, Alex
0

Commented:
I think the following should work, without using the array, but I don't know why you wouldn't want to do so?

#include <iostream>

using namespace std;

int main() {

unsigned char character;
cout << "Please enter four ASCII characters: ";
character = cin.get();

int letter = 0 ;
letter = letter | ((int)character << 24);
character = cin.get();
letter = letter | ((int)character << 16);
character = cin.get();
letter = letter | ((int)character << 8 ) ;
character = cin.get();
letter = letter | ((int)character);

cout << " The value as Hex " << hex << letter;

cout << " The letters in reverse order:";

unsigned char numone, numtwo, numthree, numfour;
numone   = (unsigned char)(letter >> 24 );
numtwo   = (unsigned char)(letter >> 16 );
numthree = (unsigned char)(letter >> 8  );
numfour  = (unsigned char)(letter);

cout << numfour << "," << numthree << "," << numtwo << "," << numone ;

return 0 ;
}
0

Commented:
That cannot work:

unsigned char character;
cout << "Please enter four ASCII characters: ";
character = cin.get();

How would 4 characters fit in one unsigned char?
0

Commented:
>>>> How would 4 characters fit in one unsigned char?

Simply by using the same character 4 times:

int letter = 0 ;
letter = letter | ((int)character << 24);
character = cin.get();
letter = letter | ((int)character << 16);
character = cin.get();
letter = letter | ((int)character << 8 ) ;
character = cin.get();
letter = letter | ((int)character);

Clever guy got all points for nothing.

Regards, Alex
0

Commented:
Sorry guys, didn't mean to steal any points, just suggested a trivial answer. :)
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.