[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 338
  • Last Modified:

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
Asked:
tedschnieders
  • 3
  • 2
  • 2
  • +1
1 Solution
 
jkrCommented:
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
 
Jaime OlivaresCommented:
> 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
 
jkrCommented:
>>jkr's code has a litle bug:
>>getline(cin, character;);
>>must be:
>>getline(cin, character);

Thanks for pointing that out :o)

I should also add that

#include <stdlib.h>

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


letter = (int) strtol ( character.c_str(), &pszCnvEnd, 16);
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

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

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now