If you’re going to compare a lot of arrays, just write a simple wrapper that implements the “==” operator:
[color=#5e6d03]template[/color] [color=#434f54]<[/color][color=#00979c]class[/color] [color=#000000]T[/color][color=#434f54],[/color] [b][color=#d35400]size_t[/color][/b] [color=#000000]N[/color][color=#434f54]>[/color]
[color=#00979c]struct[/color] [color=#00979c]array[/color] [color=#000000]{[/color]
[color=#000000]T[/color] [color=#000000]data[/color][color=#000000][[/color][color=#000000]N[/color][color=#000000]][/color][color=#000000];[/color]
[color=#000000]T[/color] [color=#434f54]&[/color][color=#00979c]operator[/color][color=#000000][[/color][color=#000000]][/color][color=#000000]([/color][b][color=#d35400]size_t[/color][/b] [color=#000000]index[/color][color=#000000])[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#000000]data[/color][color=#000000][[/color][color=#000000]index[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#00979c]const[/color] [color=#000000]T[/color] [color=#434f54]&[/color][color=#00979c]operator[/color][color=#000000][[/color][color=#000000]][/color][color=#000000]([/color][b][color=#d35400]size_t[/color][/b] [color=#000000]index[/color][color=#000000])[/color] [color=#00979c]const[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#000000]data[/color][color=#000000][[/color][color=#000000]index[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#000000]T[/color] [color=#434f54]*[/color][color=#d35400]begin[/color][color=#000000]([/color][color=#000000])[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#434f54]&[/color][color=#000000]data[/color][color=#000000][[/color][color=#000000]0[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#00979c]const[/color] [color=#000000]T[/color] [color=#434f54]*[/color][color=#d35400]begin[/color][color=#000000]([/color][color=#000000])[/color] [color=#00979c]const[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#434f54]&[/color][color=#000000]data[/color][color=#000000][[/color][color=#000000]0[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#000000]T[/color] [color=#434f54]*[/color][color=#d35400]end[/color][color=#000000]([/color][color=#000000])[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#434f54]&[/color][color=#000000]data[/color][color=#000000][[/color][color=#000000]N[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#00979c]const[/color] [color=#000000]T[/color] [color=#434f54]*[/color][color=#d35400]end[/color][color=#000000]([/color][color=#000000])[/color] [color=#00979c]const[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#434f54]&[/color][color=#000000]data[/color][color=#000000][[/color][color=#000000]N[/color][color=#000000]][/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#00979c]bool[/color] [color=#00979c]operator[/color][color=#434f54]==[/color][color=#000000]([/color][color=#00979c]const[/color] [color=#00979c]array[/color][color=#434f54]<[/color][color=#000000]T[/color][color=#434f54],[/color] [color=#000000]N[/color][color=#434f54]>[/color] [color=#434f54]&[/color][color=#000000]rhs[/color][color=#000000])[/color] [color=#00979c]const[/color] [color=#000000]{[/color]
[color=#5e6d03]if[/color] [color=#000000]([/color][color=#5e6d03]this[/color] [color=#434f54]==[/color] [color=#434f54]&[/color][color=#000000]rhs[/color][color=#000000])[/color]
[color=#5e6d03]return[/color] [color=#00979c]true[/color][color=#000000];[/color]
[color=#5e6d03]for[/color] [color=#000000]([/color][b][color=#d35400]size_t[/color][/b] [color=#000000]i[/color] [color=#434f54]=[/color] [color=#000000]0[/color][color=#000000];[/color] [color=#000000]i[/color] [color=#434f54]<[/color] [color=#000000]N[/color][color=#000000];[/color] [color=#000000]i[/color][color=#434f54]++[/color][color=#000000])[/color]
[color=#5e6d03]if[/color] [color=#000000]([/color][color=#000000]([/color][color=#434f54]*[/color][color=#5e6d03]this[/color][color=#000000])[/color][color=#000000][[/color][color=#000000]i[/color][color=#000000]][/color] [color=#434f54]!=[/color] [color=#000000]rhs[/color][color=#000000][[/color][color=#000000]i[/color][color=#000000]][/color][color=#000000])[/color]
[color=#5e6d03]return[/color] [color=#00979c]false[/color][color=#000000];[/color]
[color=#5e6d03]return[/color] [color=#00979c]true[/color][color=#000000];[/color]
[color=#000000]}[/color]
[color=#00979c]bool[/color] [color=#00979c]operator[/color][color=#434f54]!=[/color][color=#000000]([/color][color=#00979c]const[/color] [color=#00979c]array[/color][color=#434f54]<[/color][color=#000000]T[/color][color=#434f54],[/color] [color=#000000]N[/color][color=#434f54]>[/color] [color=#434f54]&[/color][color=#000000]rhs[/color][color=#000000])[/color] [color=#00979c]const[/color] [color=#000000]{[/color] [color=#5e6d03]return[/color] [color=#434f54]![/color][color=#000000]([/color][color=#434f54]*[/color][color=#5e6d03]this[/color] [color=#434f54]==[/color] [color=#000000]rhs[/color][color=#000000])[/color][color=#000000];[/color] [color=#000000]}[/color]
[color=#000000]}[/color][color=#000000];[/color]
template <class T, size_t N>
struct array {
T data[N];
T &operator[](size_t index) { return data[index]; }
const T &operator[](size_t index) const { return data[index]; }
T *begin() { return &data[0]; }
const T *begin() const { return &data[0]; }
T *end() { return &data[N]; }
const T *end() const { return &data[N]; }
bool operator==(const array<T, N> &rhs) const {
if (this == &rhs)
return true;
for (size_t i = 0; i < N; i++)
if ((*this)[i] != rhs[i])
return false;
return true;
}
bool operator!=(const array<T, N> &rhs) const { return !(*this == rhs); }
};
array<int, 7> dataArray = {{1, 1, 0, 1, 0, 0, 1}}; // input array (should be matched with n1)
array<int, 7> n0 = {{0, 0, 0, 0, 0, 0, 0}}; // these arrays represent number to compare with
array<int, 7> n1 = {{1, 1, 0, 1, 0, 0, 1}};
array<int, 7> n2 = {{0, 1, 0, 1, 0, 1, 0}};
array<int, 7> n3 = {{1, 0, 0, 0, 0, 1, 1}};
void setup() {
Serial.begin(115200);
while(!Serial);
}
void loop() {
if (dataArray == n0)
Serial.println("digit: 0");
else if (dataArray == n1)
Serial.println("digit: 1");
else if (dataArray == n2)
Serial.println("digit: 2");
else if (dataArray == n3)
Serial.println("digit: 3");
else
Serial.println("digit: unknown");
while(1);
}
However, this would be ridiculous if your arrays only contain zeros and ones. Just save them as bits in a byte:
uint8_t data = 0b1101001; // input (should be matched with n1)
uint8_t n0 = 0b0000000; // these represent numbers to compare with
uint8_t n1 = 0b1101001;
uint8_t n2 = 0b0101010;
uint8_t n3 = 0b1000011;
void setup() {
Serial.begin(115200);
while(!Serial);
}
void loop() {
if (data == n0)
Serial.println("digit: 0");
else if (data == n1)
Serial.println("digit: 1");
else if (data == n2)
Serial.println("digit: 2");
else if (data == n3)
Serial.println("digit: 3");
else
Serial.println("digit: unknown");
while(1);
}
Pieter