Buffer to integers

Hi,
I have a buffer which contains hex numbers

e.g ff 22 5f 4f 4f ff 4a 6a aa ff 9a 9b af .....etc

I want to copy each of the hex numbers from the buffer in turn, to an integer.
i.e.
int numa = 0xff;
int numb = 0x22;
int numc = 0x5f;
int numd = 0x4f;  
int nume = 0x4f; ...and so forth

I need the code to be efficient please,

Thanks
John
XPUSRAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

MeiaDoseCommented:
This buffer is a array of hex numbers? or is a string?

Post the declaration of that buffer please.

0
XPUSRAuthor Commented:
----------------------------------
char * buffer;
buffer = (char*) malloc (10000);
fgets ( buffer, 1000,"file.txt" );
-------------------------------------
the buffer is a string of hex values(without the 0x) "ff 22 5f 4f 4f ff 4a 6a aa ff 9a 9b af ". These values are taken from a text file "file.txt" and copied to the buffer.

sorry for being so ambiguous...

J
0
DexstarCommented:
XPUSR:

> I want to copy each of the hex numbers from the buffer in turn, to an integer.

Try this:

      int GetHexValue( char chr )
      {
            switch( toupper(chr) )
            {
            case '0': return 0x00;      break;
            case '1': return 0x01;      break;
            case '2': return 0x02;      break;
            case '3': return 0x03;      break;
            case '4': return 0x04;      break;
            case '5': return 0x05;      break;
            case '6': return 0x06;      break;
            case '7': return 0x07;      break;
            case '8': return 0x08;      break;
            case '9': return 0x09;      break;
            case 'A': return 0x0A;      break;
            case 'B': return 0x0B;      break;
            case 'C': return 0x0C;      break;
            case 'D': return 0x0D;      break;
            case 'E': return 0x0E;      break;
            case 'F': return 0x0F;      break;
            default:  return 0;            break;
            }
      }      

      // lpszChars = Array of Chars to Convert
      // pInts = Array of Ints to Hold Converted Values
      // nSize = # of Ints to Convert
      void ConvertHex( char* lpszChars, int* pInts, size_t nSize )
      {
            char*      lpCurrent = lpszChars;
            
            for ( unsigned register nCounter = 0 ; nCounter < nSize ; ++nCounter )
            {
                  pInts[nCounter] = (GetHexValue(*(lpCurrent++)) << 8) |
                                                GetHexValue(*(lpCurrent++));
            }
      }

Just allocate the array of integers that you want to convert, and then ConvertHex().


Hope that helps,
Dex*
0
Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

efnCommented:
Or you could let the library do more of the work:

#include <sstream>

using namespace std;

istringstream iss(buffer);
// Tell iss to interpret numbers as hexadecimal.
iss.setf(ios::hex, ios::basefield);

iss >> numa;
iss >> numb;
//  etc.

--efn
0
EarthQuakerCommented:
Developping efn's path of stopping wheel's reinvention :

#include <algorithm>
#include <sstream>
#include <vector>

const char* buffer="ff 22 5f 4f 4f ff 4a 6a aa ff 9a 9b af";
istringstream ss(buffer);
ss >> hex;
vector<int> v;
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(v));

cout << "Item 1 is " << v[0] << endl;
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
DexstarCommented:
Well, those are good too... I just wanted to give him a solution where it was very clear what was going on and how it worked.  You start invoking the STL like that on someone who doesn't know it, and they will find it difficult to learn how you did what you did.

Dex*
0
EarthQuakerCommented:
Dex : Nothing wrong with your solution, it's prolly faster.

I just tend to use something premade & robust & fast instead of doing all by hand.
0
XPUSRAuthor Commented:
Thanks both solutions work 100%, appreciate that you were trying to explain it....

John
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Editors IDEs

From novice to tech pro — start learning today.