i would like to copy the contents of a byte array to a long variable. my code looks like this:

long key = 0;
for (i = 0; i < 8; i++) {
    key <<= 8;
    key |= (long)(buffer[i]);  //<- this line causes the problem
}

however, when i run the program, there is an error message saying "unable to handle exception". what may have cause this problem?

Recommended Answers

All 4 Replies

There's a special function for this: atol()

Here's an example of how to use it:

#include <stdio.h>
#include <stdlib.h>

int main ()
{
  long li;
  char ch[] = "1100033884"; 
  li = atol (ch);
  
  return 0;
}

Niek

If buffer contains the binary representation of the long then you can just do a simple assignment. But you need to consider the Big/Little Endean problem if the data comes from another source such as across the internet. long x = *(long *)buffer; or use memcpy

long x;
memcpy(&x, buffer, sizeof(long));

or use a union

int main()
{
   typedef unsigned char byte ;
   union
   {
     byte buffer[ sizeof(long) ] ;
     long key ;
   };
   // ...
}
commented: Nice +4
key |= (long)(buffer[i]);  //<- this line causes the problem
}

there is an error message saying "unable to handle exception".

Is buffer declared as a byte array?
unsigned char buffer[8];

Native types don't throw exceptions. What you might be doing is using a vector and accessing an index greater than the vector size. Or, the exception is in another part of the code.

If buffer is a vector you can fix this problem by forcing the creation of a vector of predefined length.
vector<char> buffer( 8, false );

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.