2010-02-10 40 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