2012-07-17 67 views
0

我在C兩個陣列++和我想追加一個的端部的其他使得:追加到在C字節數組++

char byte1[] = {0x00}; 
char byte2[] = {0x01}; 

追加這兩種應該產生{0×00 0×01} 。我將如何做到這一點?在Java中使用System.arraycopy()足夠簡單,但我不確定什麼庫會幫助我在C++/C中完成此任務,因爲我正在編寫一個微控制器。

+0

易於使用'的std :: VECTOR'。像'result = byte1 + byte2'。 – chris 2012-07-17 16:59:10

+0

std :: vector在AVR上可能無法很好地工作。 – 2012-07-17 17:04:47

+0

是的,這是唯一的問題。儘管如此,這很容易。 – chris 2012-07-17 17:06:54

回答

4

如果你使用C,你可以這樣做:

//Whatever sizes your stating arrays are. 
const int S_ARR1 = 3; 
const int S_ARR2 = 2; 

//Create buffer that can hold both. 
char combined[S_ARR1 + S_arr2]; 

//Copy arrays in individually. 
memcpy(combined, byte1, S_ARR1); 
memcpy(combined + S_ARR1, byte2, S_ARR2); 

如果你想C++,唐首先不要使用字節數組。使用std :: vector作爲一個數組,可以跟蹤它自己的元素數量,因此你可以感覺更像你在java世界:)

雖然關於C++矢量內存嵌入式的一點警告:

你在一個微控制器,std :: vector可以浪費很多內存,因爲它會根據當前大小的倍數增長。它越多,你就會越浪費。話雖如此,這是一個偉大的課程,只要你知道它如何處理它的記憶是一個很好的選擇。

+0

關於C++部分,爲什麼不對'std :: vector'使用'reserve()'/'resize()'來最小化重新分配? – 2012-07-17 17:07:00

+0

這絕對是一種選擇。你甚至可以使用myVector.Swap(new std :: vector (myVector));訣竅,如果你知道你在做什麼:)但是C也可以很好,不管。 – 2012-07-17 17:08:36

+0

或者,您可以使用'std :: array'來避免'memcpy',或者編寫自己的'std :: conservative_vector'來避免手動管理內存。 – 2012-07-17 17:11:06

0

你不能因爲你寫它那裏,C分配這些陣列如果你知道你有多少數據要適合你用1個字節

初始化其中的數據的大小固定的內存使用你可以用char byte[10];爲10個元素初始化一個更大的數組,但是你不能在C中創建時自動填充它。如果你不知道需要多少數據直到運行時,那麼你需要爲它分配new(或者malloc或c)。

如果你想樣的行爲看的std ::向量Java中,如果您的微控制器的支持是