在C++中将8字节的数组转换为带符号的long

Bob*_*bio 2 c++ byte long-integer

我有一个8字节的数组,我正在尝试将其转换为C++中的有符号长整数,似乎无法弄明白.据我所知,长整数只有4个字节,有人可以提供一些信息吗?如果它是32位还是64位是否重要?

ere*_*eOn 8

您可能应该使用int64_t保证长度为8个字节的a.

您没有说明数据如何表示(它的字节顺序)到您的数组中,但您可能会使用reinterpret_cast<>甚至更好:使用shift操作来"构建"整数.

就像是:

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;
Run Code Online (Sandbox Code Playgroud)


Ita*_*atz 5

数据类型之间转换的另一种方法(我认为在某些情况下很方便)是使用联合数据类型,它允许您以不同的数据类型访问相同的内存部分。当然,有关字节顺序、数据类型大小等的所有其他注释仍然有效。

例如:

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";
Run Code Online (Sandbox Code Playgroud)