将int数组转换为7bytes变量

时间:2013-09-30 18:53:09

标签: c++ c

我有一个int:int temp [56]数组,每个元素都等于'1'或'0'。是否真的可以使用像这样的代码将这个int数组转换为一个7bytes变量?

int temp[56]={...};
int a=0;
int b=0;

for (int i=0; i<56; i++)
{
b=temp[i];
a|=(b<<i);  

2 个答案:

答案 0 :(得分:5)

如果你有56个int只有01的值,那么你真的有56个bool超大包。你可以通过以下方式解决这个问题:

1)使用bool数组

bool arr[56];

2)使用std::vector<bool>

std::vector<bool> arr;

3)使用std::bitset<SIZE>

std::bitset<56> arr;

4)如果你绝对必须(由于某种原因),将它们打包成一个整数(假设一个32位整数):

unsigned int arr[2]; // 2*32 = 64, so we have enough space for all 56 flags
// to set the i'th bit
arr[i / 32] |= 1U << (i % 32);
// or to clear the i'th bit
arr[i / 32] &= ~(1U << (i % 32));

首选3个选项中的一个应该是首选。

答案 1 :(得分:0)

C解决方案:接近OP的建议,但使用int64_t确保位移工作,并且结果足够大。可以改用long long

int temp[56]={...};  // temp filled with 0 or 1.
int64_t a=0;

for (int i=0; i<56; i++) {
  a |= ((int64_t) temp[i]) << i;
}