Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将布尔向量存储到字符数组?_C++_Arrays_Vector - Fatal编程技术网

C++ 如何将布尔向量存储到字符数组?

C++ 如何将布尔向量存储到字符数组?,c++,arrays,vector,C++,Arrays,Vector,我有两个向量。 一是 但我无法从outputValuesInBits复制数据 如果我按照下面的方式做 unsigned char* output = new unsigned char[outputValuesInBits.size()/8+1](); memcpy(&output, outputValuesInBits.data(), 2); 这给了我一个错误 error: invalid use of void expression memcpy(&output,

我有两个向量。
一是

但我无法从outputValuesInBits复制数据
如果我按照下面的方式做

unsigned char* output = new unsigned char[outputValuesInBits.size()/8+1]();
memcpy(&output, outputValuesInBits.data(), 2);
这给了我一个错误

error: invalid use of void expression
     memcpy(&output, outputValuesInBits.data(), 2);
谁能告诉我如何将布尔向量复制到char数组


提前谢谢你

恐怕您不能用便携方式。表示:专门化与非专门化向量具有相同的成员函数,但数据、emplace和emplace_back除外,这些函数不在该专门化中。这意味着,
数据
在您尝试使用时,无法定义错误的原因


如果不考虑可移植性,则没有解决方案,因为存储不一定是bool值的数组,但是库实现可能会优化存储,以便将每个值存储在单个位中。(强调我的观点)。我对may的理解是,您甚至不能确定16个布尔值是否存储在两个连续的字节中:实现必须只提供一种使用它们(几乎)的方法,就像它们存储在16个不同的布尔值中一样


如果您可以忘记可部分性,那么您必须找到当前实现的源代码,以了解字节数组存储的位置和方式。。。但这并不是那么容易…

恐怕你不能用便携式的方式。表示:专门化与非专门化向量具有相同的成员函数,但数据、emplace和emplace_back除外,这些函数不在该专门化中。这意味着,
数据
在您尝试使用时,无法定义错误的原因


如果不考虑可移植性,则没有解决方案,因为存储不一定是bool值的数组,但是库实现可能会优化存储,以便将每个值存储在单个位中。(强调我的观点)。我对may的理解是,您甚至不能确定16个布尔值是否存储在两个连续的字节中:实现必须只提供一种使用它们(几乎)的方法,就像它们存储在16个不同的布尔值中一样


如果您可以忘记可部分性,那么您必须找到当前实现的源代码,以了解字节数组存储的位置和方式。。。但这并不是那么容易…

std::vector
没有数据成员函数

std::vector
没有数据成员函数

至少在g++编译器中,您可以使用vector::iterator的_M_p成员,它是指向数据的指针

例如:

std::vector<bool> vBool(16, false);
vBool[0] = true;
vBool[2] = true;
vBool[13] = true;
std::vector<unsigned char> vChar(2);
unsigned short *ptrUS = reinterpret_cast<unsigned short *>( &(vChar[0]) );
*ptrUS = *reinterpret_cast<unsigned short *>(vBool.begin()._M_p);

std::cout << (unsigned int)vChar[0] << " " << (unsigned int)vChar[1] << "\n";
std::vector vBool(16,false);
vBool[0]=真;
vBool[2]=真;
vBool[13]=真;
std::载体vChar(2);
无符号短*ptrUS=重新解释投射(&(vChar[0]);
*ptrUS=*重新解释强制转换(vBool.begin();

std::cout至少在g++编译器中,您可以使用vector::iterator的_M_p成员,它是指向数据的指针

例如:

std::vector<bool> vBool(16, false);
vBool[0] = true;
vBool[2] = true;
vBool[13] = true;
std::vector<unsigned char> vChar(2);
unsigned short *ptrUS = reinterpret_cast<unsigned short *>( &(vChar[0]) );
*ptrUS = *reinterpret_cast<unsigned short *>(vBool.begin()._M_p);

std::cout << (unsigned int)vChar[0] << " " << (unsigned int)vChar[1] << "\n";
std::vector vBool(16,false);
vBool[0]=真;
vBool[2]=真;
vBool[13]=真;
std::载体vChar(2);
无符号短*ptrUS=重新解释投射(&(vChar[0]);
*ptrUS=*重新解释强制转换(vBool.begin();

std::cout“存储不一定是bool值的数组,但库实现可能会优化存储,使每个值都存储在一个位中。”——关键是您不能依赖布局。“存储不一定是bool值的数组,但库实现可以优化存储,使每个值存储在单个位中。“——重点是你不能依赖布局。谢谢。然后,我可能需要将位向量复制到位集。“for loop”是将数据复制到位集的唯一解决方案吗?还是您认为有更好的方法将bool向量复制到char*?谢谢。然后,我可能需要将位向量复制到位集。“for loop”是将数据复制到位集的唯一解决方案吗?或者您认为有更好的方法将bool向量复制到char*?cppreference链接将是cppreference链接
error: invalid use of void expression
     memcpy(&output, outputValuesInBits.data(), 2);
std::vector<bool> vBool(16, false);
vBool[0] = true;
vBool[2] = true;
vBool[13] = true;
std::vector<unsigned char> vChar(2);
unsigned short *ptrUS = reinterpret_cast<unsigned short *>( &(vChar[0]) );
*ptrUS = *reinterpret_cast<unsigned short *>(vBool.begin()._M_p);

std::cout << (unsigned int)vChar[0] << " " << (unsigned int)vChar[1] << "\n";