присвоение массива байтов

byte test[4];
memset(test,0x00,4);

test[]={0xb4,0xaf,0x98,0x1a};

вышеупомянутый код дает мне, ошибка ожидала первичное выражение прежде']' маркер. кто-либо может сказать мне что случилось с этим типом присвоения?

7
задан Samuel Harmer 10 November 2011 в 14:48
поделиться

4 ответа

Бен и Крис говорят именно так.

byte test[4]={0xb4,0xaf,0x98,0x1a};

Если вы хотите сделать это во время выполнения, вы можете использовать memcpy для выполнения этой работы.

byte startState[4]={0xb4,0xaf,0x98,0x1a};
byte test[4];

memcpy(test, startState, sizeof(test));
12
ответ дан 6 December 2019 в 05:06
поделиться

Массивы не могут быть назначены. Вы можете только инициализировать их фигурными скобками.

Самое близкое, что вы можете получить, если хотите «назначить» его позже, - это объявление другого массива и его копирование:

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';
    }
}
15
ответ дан 6 December 2019 в 05:06
поделиться

В дополнение к правильному ответу @Chris Lutz:

byte test[]={0xb4,0xaf,0x98,0x1a};

Обратите внимание, что вам не нужно явно указывать размер массива в этом случае, если вы не хотите, чтобы длина массива была больше, чем количество элементов между скобками.

Это работает только в том случае, если вы инициализируете массив при его объявлении. В противном случае вам придется инициализировать каждый элемент массива явно, используя вашу любимую технику (цикл, алгоритм STL и т.д.).

8
ответ дан 6 December 2019 в 05:06
поделиться

В дополнение к правильному ответу @UncleBens я хочу отметить, что это:

byte test[4];
memset(test,0x00,4);

Может быть сокращено до:

byte test[4] = { 0 };

Это синтаксис инициализации, который вы пытаетесь использовать. Язык заполнит неназначенные пробелы цифрой 0, поэтому вам не нужно писать {0, 0, 0, 0} (и поэтому, если длина вашего массива изменится позже, вы не должны ' не нужно добавлять больше).

4
ответ дан 6 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: