2014-09-03 45 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