字节数组赋值

djo*_*010 7 c++

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

test[]={0xb4,0xaf,0x98,0x1a};
Run Code Online (Sandbox Code Playgroud)

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

Unc*_*ens 15

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

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

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);
Run Code Online (Sandbox Code Playgroud)

或者使用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';
    }
}
Run Code Online (Sandbox Code Playgroud)


Evi*_*ach 12

本和克里斯所说的是.

byte test[4]={0xb4,0xaf,0x98,0x1a};
Run Code Online (Sandbox Code Playgroud)

如果要在运行时执行此操作,可以使用memcpy来完成工作.

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

memcpy(test, startState, sizeof(test));
Run Code Online (Sandbox Code Playgroud)


Voi*_*oid 8

除了@Chris Lutz的正确答案:

byte test[]={0xb4,0xaf,0x98,0x1a};
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Mike - 或者,因为这是C++,`template <class T,size_t N> size_t array_size(T(&n)[N]){return N; 用作`size_t numTestElems = array_size(test);` (2认同)
  • @Mike:我选择sizeof(test)/ sizeof(test [0]).这样你就不用担心潜在的类型混淆了. (2认同)