# [ACCEPTED]-Convert array of 8 bytes to signed long in C++-long-integer

You probably should use a `int64_t`

which is guaranteeed 5 to be 8 bytes long.

You don't state how your 4 data is represented (its endianness) into 3 your array but you might use `reinterpret_cast<>`

or even better: use 2 shift operations to "build" your integer.

Something 1 like:

```
unsigned char array[8] = { /* Some values here */ };
uint64_t value =
static_cast<uint64_t>(array[0]) |
static_cast<uint64_t>(array[1]) << 8 |
static_cast<uint64_t>(array[2]) << 16 |
static_cast<uint64_t>(array[3]) << 24 |
static_cast<uint64_t>(array[4]) << 32 |
static_cast<uint64_t>(array[5]) << 40 |
static_cast<uint64_t>(array[6]) << 48 |
static_cast<uint64_t>(array[7]) << 56;
```

Another way of conversion between data types, which 6 I find convenient in some cases, is to use 5 the union data type, which allows you to 4 access the same memory portion as different 3 data types. Of course all other remarks 2 regarding endianness, size of data-types 1 etc. still hold.

For example:

```
union bytes {
unsigned char c[8];
uint64_t l;
} myb;
myb.c[0] = 0;
myb.c[1] = 1;
myb.c[2] = 0;
myb.c[3] = 0;
myb.c[4] = 0;
myb.c[5] = 0;
myb.c[6] = 0;
myb.c[7] = 0;
cout << "value of myb.l: " << myb.l << "\n";
```

Why not just something like the following?

```
uint8_t start_arr[8] = {0,1,2,3,4,5,6,7};
uint64_t val = (uint64_t)(*(uint64_t*)&start_arr[0]);
std::cout << std::hex << val << std::endl;
```

0

Some long integers are 8 bytes, some are 9 4. The 8 byte variant usually exists only 8 on 64-bit systems. Check this page if you want to 7 get an idea.

Of course, we don't know what 6 it is in your case, so you'd have to post 5 more details.

To be on the safe side, you 4 could decide to put the 8 bytes into 2 long 3 integers anyway. That way, it will always 2 work. In the worst case you'd be wasting 1 half your storage space.

Only C99 has types guaranteed to hold 64 4 bits of information - `long long`

and `int*64_t`

. For C++, you 3 should look for a BigInt class/library. Or, as 2 has been suggested, roll your own class 1 using two `long`

s.

More Related questions

We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.