2010-04-23 109 views
3

在以下示例c代碼中,用於Arduino項目中,我正在尋找能夠在指針數組中獲取特定字節數組的大小到字節,例如從指針數組中獲取特定字節數組的大小爲字節

void setup() 
    { 
     Serial.begin(9600); // for debugging 

     byte zero[] = {8, 169, 8, 128, 2,171,145,155,141,177,187,187,2,152,2,8,134,199}; 
     byte one[] = {8, 179, 138, 138, 177 ,2,146, 8, 134, 8, 194,2,1,14,199,7, 145, 8,131, 8,158,8,187,187,191}; 
     byte two[] = {29,7,1,8, 169, 8, 128, 2,171,145,155,141,177,187,187,2,152,2,8,134,199, 2, 2, 8, 179, 138, 138, 177 ,2,146, 8, 134, 8, 194,2,1,14,199,7, 145, 8,131, 8,158,8,187,187,191}; 

     byte* numbers[3] = {zero, one, two }; 

     function(numbers[1], sizeof(numbers[1])/sizeof(byte)); //doesn't work as desired, always passes 2 as the length 
     function(numbers[1], 25); //this works 
    } 

    void loop() { 
    } 

    void function(byte arr[], int len) 
    { 
     Serial.print("length: "); 
     Serial.println(len); 
     for (int i=0; i<len; i++){ 
     Serial.print("array element "); 
     Serial.print(i); 
     Serial.print(" has value "); 
     Serial.println((int)arr[i]); 
     } 
    } 

在該代碼中,我明白sizeof(numbers[1])/sizeof(byte)不起作用,因爲numbers[1]是一個指針,而不是字節數組值。

在這個例子中,我可以在運行時獲取指向字節的指針數組內的特定(運行時確定的)字節數組的長度嗎?瞭解我僅限於在Arduino環境的c(或彙編)中開發。

也打開其他建議,而不是指向字節的指針數組。總體目標是在運行時組織可以檢索的字節列表,長度可以是長度。

+0

你打算在運行時獲取這個字節數組嗎?它是從外部設備或文件讀入嗎?或者它將始終是一個在代碼中聲明的數組。如果是代碼,那麼ndim的解決方案將起作用。如果是外部的,那麼您將通過讀取該文件/源文件來獲得某種大小,以便調整動態數組的大小是? – 2010-04-23 00:48:36

+0

它全部在代碼中設置。外部驅動程序是一個計時器,在特定時間使用特定的字節數組,以使語音合成器說出適合當前時鐘計時器值的事情。 – 2010-04-23 01:05:49

回答

3
void setup(void) 
{ 
    ... 

    byte* numbers[3] = {zero, one, two }; 
    size_t sizes[3] = {sizeof(zero), sizeof(one), sizeof(two)}; 

    function(numbers[1], sizes[1]); 
} 
+0

非常棒,非常感謝! – 2010-04-23 01:04:30