我在头文件中定义了一个typedef:
typedef unsigned char BYTE;
我有以下代码:
BYTE rgbPlaintext[] = {0x00};
rgbPlaintext* = &vec[0];
vec
是一个unsigned char
数组,由一个文件填充(没有问题)。我的问题是,上面的代码无法成功构建,只需syntax error : '='
行rgbPlaintext* = &vec[0];
如何成功将数组指向vectordef基础类型的向量中的数组?
谢谢。
答案 0 :(得分:1)
我的问题是,上述代码无法成功构建,只需
syntax error : '='
行rgbPlaintext* = &vec[0];
您得到错误,因为编译器期望乘法运算符的右手参数,而是找到=
,它不是乘法运算符的有效操作数。我觉得乘法不是你的意图。
如何将矢量转换为typdef类型的数组
无法将矢量转换为数组。
也许您的意思是将矢量的内容复制到数组中。这很简单:
std::copy(vec.begin(), vec.end(), rgbPlaintext);
但是,你需要小心。如果数组小于向量,那么它将溢出并且你得到未定义的行为。
如何成功将数组指向数组...
数组不指向任何东西,你不能指出任何东西。数组包含对象。
在这种情况下,数组rgbPlaintext
包含值为0x00
的单个元素。您可以使用我展示的方法将向量的内容复制到rgbPlaintext
,但如果向量包含多个元素,则副本将溢出。
如果数组所基于的向量是由数据文件填充的,那么如何知道所需数组的大小?
使用std::vector::size()
可以知道向量的大小。但是在编译时无法知道大小,因此如果您打算将内容复制到数组并且不能限制最大大小,则不能使用自动或静态分配的数组。您可以使用动态分配的数组,为此,我建议使用std::vector
。
将矢量复制到另一个很简单:
std::vector<BYTE> rgbPlaintext = vec;
只要BYTE
与decltype(vec)::value_type
的类型相同,就可以了。如果一种类型是另一种类型的别名,则无关紧要。
答案 1 :(得分:0)
代码:
rgbPlaintext * =&amp; vec [0]; // vec是一个unsigned char数组
语法不正确rgbPlaintext *如另一篇文章所述。
要执行以下操作:
如何成功将数组指向vectordef基础类型的向量中的数组?
我将假设您真正说的是vec是来自std的向量,其中包含无符号字符串的数组。如果是这种情况,那么我会做以下事情:
BYTE* rgbPlaintext = NULL;
rgbPlaintext = vec[0]; // any subscript of the list of arrays
cout << rgbPlainText[0] << endl; // return the first value at sub of array attained from vec
这是一个小的测试程序,以澄清我的理解:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv )
{
typedef unsigned char NBYTE;
typedef vector<NBYTE*> TEST_ARRAYBYTE;
NBYTE *rgbPlaintext = NULL;
NBYTE testarray[] = {'2', '1'};
NBYTE testarray1[] = {'1', '2'};
TEST_ARRAYBYTE vec;
vec.push_back(testarray);
vec.push_back(testarray1);
rgbPlaintext = vec[0];
cout << rgbPlaintext[0] << endl;
rgbPlaintext = vec[1];
cout << rgbPlaintext[0] << endl;
}