字节数组赋值

时间:2010-02-10 21:14:33

标签: c++

byte test[4];
memset(test,0x00,4);

test[]={0xb4,0xaf,0x98,0x1a};

上面的代码在']'标记之前给出了一个错误预期的primary-expression。 谁能告诉我这种类型的任务有什么问题?

4 个答案:

答案 0 :(得分:14)

无法分配数组。您只能使用大括号初始化

如果你想稍后“分配”它,你可以得到的最接近的是声明另一个阵列并复制它:

const int array_size = 4;
char a[array_size] = {};  //or {0} in C.
char b[array_size] = {0xb4,0xaf,0x98,0x1a};
std::copy(b, b + array_size, a);

或使用std :: tr1或boost:

中的数组类
#include <tr1/array>
#include <iostream>

int main()
{
    std::tr1::array<char, 4> a = {};

    std::tr1::array<char, 4> b = {0xb4,0xaf,0x98,0x1a};    
    a = b; //those are assignable

    for (unsigned i = 0; i != a.size(); ++i) {
        std::cout << a[i] << '\n';
    }
}

答案 1 :(得分:11)

Ben和Chris所说的是。

byte test[4]={0xb4,0xaf,0x98,0x1a};

如果你想在运行时这样做,你可以使用memcpy来完成这项工作。

byte startState[4]={0xb4,0xaf,0x98,0x1a};
byte test[4];

memcpy(test, startState, sizeof(test));

答案 2 :(得分:7)

除了@Chris Lutz的正确答案:

byte test[]={0xb4,0xaf,0x98,0x1a};

请注意,在这种情况下,您不需要显式指定数组大小,除非您希望数组长度大于括号之间的元素数。

这仅在您声明数组时初始化数组时才有效。否则,您将必须使用您喜欢的技术(循环,STL算法等)显式初始化每个数组元素。

答案 3 :(得分:4)

除了@UncleBens的正确答案外,我还要注意这一点:

byte test[4];
memset(test,0x00,4);

可缩短为:

byte test[4] = { 0 };

这是您尝试使用的初始化语法。该语言将填充未分配的空格,因此您不必编写{ 0, 0, 0, 0 }(因此,如果您的数组长度稍后更改,则不必添加更多)。