2010-02-10 41 views
6
byte test[4]; 
memset(test,0x00,4); 

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

上面的代码给了我一个错误预期初始表达式']'令牌之前。 任何人都可以告诉我这种类型的任务有什么问题吗?字节数组赋值

回答

8

本和克里斯说的是。

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

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

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

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

如果OP想要立即获得这些值,那么这会起作用,但如果他们想稍后分配它们,则不适用。但是+1, – 2010-02-10 21:26:50

+0

雅,好点克里斯。 谢谢。 我加了一个技巧来做到这一点。 – EvilTeach 2010-02-10 21:29:34

+0

基本上我有5字节数组,我想根据我解析的一些初始数据有选择地使用。所以,我正在考虑设置一个数组,然后把它永远不会改变的值,我想我会把const放在它上面,因为它永远不会改变。 – djones2010 2010-02-10 21:33:29

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); 

或使用数组类从性病:: TR1或升压:

#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'; 
    } 
} 
+0

对于漂亮的编辑+1。 – Void 2010-02-10 21:31:45

+0

如果我使用副本分配值,那么如果我在if语句的范围内使用它,那么会出现范围问题?我想要做的是在所有的功能中使用一个字节数组,但有4个其他字节输入。当我知道哪一个我想要使用我然后复制到通用字节数组(我打算把这个int,如果语句)。 – djones2010 2010-02-10 22:01:15

+0

您将*复制字节值,所以没有问题,如果源数组有一个范围较小。 – UncleBens 2010-02-10 22:13:57

4

除了@UncleBens的正确答案,我想指出这一点:

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

可缩写为:

byte test[4] = { 0 }; 

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

+0

可以进一步缩短为字节测试[4] = {} ;,但我更喜欢{0}。 – 2010-02-10 21:27:21

+0

@John - 它可以,但仅限于C++。在C中(这是我主要做的),你必须至少有一个值。 – 2010-02-10 21:34:51

+0

'byte test [4] = {0};'总是让我想到大括号里的内容被分配给了所有的元素(就像C++的'std :: vector'构造函数中的一样)。 – 2010-02-10 21:34:58

7

除了@Chris Lutz的正确答案:

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

注意,你不需要,除非你想数组的长度比大明确在这种情况下指定数组大小括号内的元素数量。

这仅适用于在声明数组时初始化数组。否则,你将不得不使用你最喜欢的技术(循环,STL算法等)来显式初始化每个数组元素。

+0

另请注意,您可以自动确定数组大小:'size_t numTestElems = sizeof(test)/ sizeof(byte);' – 2010-02-10 21:37:29

+2

@Mike - 或者,因为这是C++,所以'template size_t array_size(T(&n)[N]){return N; }'用作'size_t numTestElems = array_size(test);' – 2010-02-10 21:39:33

+2

@Mike:我会用sizeof(test)/ sizeof(test [0])去。这样你就不必担心潜在的混淆。 – Void 2010-02-10 21:40:59