我在C兩個陣列++和我想追加一個的端部的其他使得:追加到在C字節數組++
char byte1[] = {0x00};
char byte2[] = {0x01};
追加這兩種應該產生{0×00 0×01} 。我將如何做到這一點?在Java中使用System.arraycopy()足夠簡單,但我不確定什麼庫會幫助我在C++/C中完成此任務,因爲我正在編寫一個微控制器。
我在C兩個陣列++和我想追加一個的端部的其他使得:追加到在C字節數組++
char byte1[] = {0x00};
char byte2[] = {0x01};
追加這兩種應該產生{0×00 0×01} 。我將如何做到這一點?在Java中使用System.arraycopy()足夠簡單,但我不確定什麼庫會幫助我在C++/C中完成此任務,因爲我正在編寫一個微控制器。
如果你使用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可以浪費很多內存,因爲它會根據當前大小的倍數增長。它越多,你就會越浪費。話雖如此,這是一個偉大的課程,只要你知道它如何處理它的記憶是一個很好的選擇。
關於C++部分,爲什麼不對'std :: vector'使用'reserve()'/'resize()'來最小化重新分配? – 2012-07-17 17:07:00
這絕對是一種選擇。你甚至可以使用myVector.Swap(new std :: vector
或者,您可以使用'std :: array'來避免'memcpy',或者編寫自己的'std :: conservative_vector'來避免手動管理內存。 – 2012-07-17 17:11:06
你不能因爲你寫它那裏,C分配這些陣列如果你知道你有多少數據要適合你用1個字節
初始化其中的數據的大小固定的內存使用你可以用char byte[10];
爲10個元素初始化一個更大的數組,但是你不能在C中創建時自動填充它。如果你不知道需要多少數據直到運行時,那麼你需要爲它分配new(或者malloc或c)。
如果你想樣的行爲看的std ::向量Java中,如果您的微控制器的支持是
嘗試使用Arduino環境中的string
類,該類意圖在AVR上與avr-g ++編譯器一起使用。但我不確定它是否支持空(0)字節。
http://arduino.cc/en/Reference/StringObject http://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/WString.cpp
易於使用'的std :: VECTOR'。像'result = byte1 + byte2'。 – chris 2012-07-17 16:59:10
std :: vector在AVR上可能無法很好地工作。 – 2012-07-17 17:04:47
是的,這是唯一的問題。儘管如此,這很容易。 – chris 2012-07-17 17:06:54