3

Arduinoプロジェクトで使用される次の例の C コードでは、たとえば、バイトへのポインターの配列内で特定のバイト配列のサイズを取得する機能を探しています。

    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 (またはアセンブリ) での開発に限定されていることを理解してください。

また、バイトへのポインターの配列ではなく、他の提案も受け付けています。全体的な目的は、実行時に長さで取得できるバイトのリストを編成することです。

4

1 に答える 1

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]);
}
于 2010-04-23T00:05:41.840 に答える