2014-09-03 76 views
0

我有幾個字節數組和字節數組的數組。我想從最後一個數組(字節數組數組)中獲取一個字節數組的大小。 sizeof()在字節數組上工作良好,但是當我嘗試使用字節數組索引數組時,它不起作用。正確獲取sizeof()

byte A[]={B01111110,B10001000,B10001000,B10001000,B01111110}; 
byte B[]={B11111110,B10010010,B10010010,B10010010,B01101100}; 
byte gamma[]={B11111110,B10000000,B10000000,B10000000,B10000000}; 

byte *test[]={A,B,gamma} 

Serial.println(sizeof(gamma)); 
Serial.println(sizeof(test[2])); 

第一串行打印給出5這是正確的第二給出2(可能是指針的大小)。

如何獲得正確的結果,因爲我想在for循環中使用test[i]

我讀,我應該爲了不得到的指針的大小聲明*test[]作爲test[][]但我得到分配byte*byte的錯誤。

+5

你要跟蹤的大小。或者使用爲您提供的容器類型。 – juanchopanza 2014-09-03 09:55:27

回答

1

您可以使用:

byte (*(test[3]))[5]={&A, &B, &gamma}; 

static_assert(5 == sizeof(*test[0]), "unexpected size"); 

但使用std::vector會更簡單。

如果不同陣列的尺寸是不同的,必須提供一種方法來知道大小:

  • (對於C-字符串作爲'\0')提供一個標記值
  • 給長度/沿着指針大小,像:

    std::pair<byte*, std::size_t> tests[] = { 
        {A, sizeof(A)}, 
        {B, sizeof(B)}, 
        {gamma, sizeof(gamma)} 
    }; 
    
+0

從我知道的Arduino雖然它是C/C++現在使用vectors.This是我的第一個想法。所有字節數組的大小不是5有些是6有些是2等我可以跳過大小聲明嗎? – kyrpav 2014-09-03 10:12:15

+0

@kyrpav:第一個解決方案不處理不同的大小,我編輯我的答案以提供替代解決方案。 – Jarod42 2014-09-03 12:13:46

+0

@kyrpav請幫助您的微控制器的內存,並跟蹤每個陣列的大小。最簡單的事情就是 'byte * A = {0x01,0x02,0x22}; int length_of_A = 3'。這樣你永遠不會損壞內存.... – frarugi87 2014-09-12 21:06:12