Вы не можете передать массив функции в C ++. Есть несколько способов обойти это
1) Использовать векторы вместо массивов
2) Передать ссылку на массив (это работает только с массивом фиксированного размера)
3) Передать указатель на первый элемент массива (для этого необходимо передать размер в качестве отдельного параметра).
Вот как вы делаете все три
1) использовать векторы
#include <vector>
std::vector<unsigned char>{1,2,3,4,5,6,7,8}:
logger(numbers);
void logger(const vector<unsigned char>& data)
{
for (auto i = 0; i < data.size(); i++)
{
std::cout << (unsigned)data[i] << "\n";
}
}
2) используйте ссылку
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
logger(numbers);
void logger(unsigned char (&data)[8])
{
for (auto i = 0; i < 8; i++)
{
std::cout << (unsigned)data[i] << "\n";
}
}
3) использовать указатель
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
logger(numbers, 8);
void logger(unsigned char *data, size_t size)
{
for (auto i = 0; i < size; i++)
{
std::cout << (unsigned)data[i] << "\n";
}
}
векторы - лучшее решение. C ++ имеет правильные структуры данных в качестве стандарта, используйте их.
Как уже было объяснено, ваши проблемы с печатью связаны со специальными правилами для печати символов, просто приведите их без знака перед печатью.
Ни один код не был протестирован (или даже скомпилирован).