如何将向量转换为typdef类型的数组

时间:2016-04-12 15:25:23

标签: c++ arrays file vector

我在头文件中定义了一个typedef:

typedef unsigned char       BYTE;

我有以下代码:

BYTE rgbPlaintext[] = {0x00};
rgbPlaintext* = &vec[0];

vec是一个unsigned char数组,由一个文件填充(没有问题)。我的问题是,上面的代码无法成功构建,只需syntax error : '='rgbPlaintext* = &vec[0];

如何成功将数组指向vectordef基础类型的向量中的数组?

谢谢。

2 个答案:

答案 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;

只要BYTEdecltype(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;

}