byte test[4];
memset(test,0x00,4);
test[]={0xb4,0xaf,0x98,0x1a};
вышеупомянутый код дает мне, ошибка ожидала первичное выражение прежде']' маркер. кто-либо может сказать мне что случилось с этим типом присвоения?
Бен и Крис говорят именно так.
byte test[4]={0xb4,0xaf,0x98,0x1a};
Если вы хотите сделать это во время выполнения, вы можете использовать memcpy для выполнения этой работы.
byte startState[4]={0xb4,0xaf,0x98,0x1a};
byte test[4];
memcpy(test, startState, sizeof(test));
Массивы не могут быть назначены. Вы можете только инициализировать их фигурными скобками.
Самое близкое, что вы можете получить, если хотите «назначить» его позже, - это объявление другого массива и его копирование:
const int array_size = 4;
char a[array_size] = {}; //or {0} in C.
char b[array_size] = {0xb4,0xaf,0x98,0x1a};
std::copy(b, b + array_size, a);
или использование класса массива из std :: tr1 или boost:
#include <tr1/array>
#include <iostream>
int main()
{
std::tr1::array<char, 4> a = {};
std::tr1::array<char, 4> b = {0xb4,0xaf,0x98,0x1a};
a = b; //those are assignable
for (unsigned i = 0; i != a.size(); ++i) {
std::cout << a[i] << '\n';
}
}
В дополнение к правильному ответу @Chris Lutz:
byte test[]={0xb4,0xaf,0x98,0x1a};
Обратите внимание, что вам не нужно явно указывать размер массива в этом случае, если вы не хотите, чтобы длина массива была больше, чем количество элементов между скобками.
Это работает только в том случае, если вы инициализируете массив при его объявлении. В противном случае вам придется инициализировать каждый элемент массива явно, используя вашу любимую технику (цикл, алгоритм STL и т.д.).
В дополнение к правильному ответу @UncleBens я хочу отметить, что это:
byte test[4];
memset(test,0x00,4);
Может быть сокращено до:
byte test[4] = { 0 };
Это синтаксис инициализации, который вы пытаетесь использовать. Язык заполнит неназначенные пробелы цифрой 0, поэтому вам не нужно писать {0, 0, 0, 0}
(и поэтому, если длина вашего массива изменится позже, вы не должны ' не нужно добавлять больше).