Деление массива байтов: какой функцией?
- Войдите на сайт для отправки комментариев
Ср, 01/05/2019 - 23:17
То есть например из 16-ти байтного массива:
byte mainBuffer[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; получить такие 4 массива по 4 байта byte buffer_0[] = {0x00, 0x01, 0x02, 0x03}; byte buffer_1[] = {0x04, 0x05, 0x06, 0x07}; byte buffer_2[] = {0x08, 0x09, 0x0A, 0x0B}; byte buffer_3[] = {0x0C, 0x0D, 0x0E, 0x0F};
Есть ли готовая функция для этого? Подскажите пожалуйста, кто разбирается!
Оно?
Вариант 1 - очевидный - два вложенных цикла for
Вариант 2 - для эстетов - описать 16 байтовый массив как унион для четырех переменных типа лонг
Оно?
шикарно
https://ru.wikipedia.org/wiki/Memcpy
Тфу, вот так всмысле
Только это будет не копия а ссылки на элементы, соответственно границы надо контролировать самому.
Полагаю, что тут приведён способ того, как получить четыре указателя на разные части массива, а не получить четыре массива из одного. А это слегка разные вещи.
Вы имеете в виду что-то вроде этого
Но названия у массивов ведь разные! Как их запихнуть в цикл for?
Вариант № 1
Вариант № 2
Думаю, что пока ТС не соблаговолит уточнить - что, по его мнению, означает "получить 4 массива", особого смысла в упражнениях нет.
Тфу, вот так всмысле
Только это будет не копия а ссылки на элементы, соответственно границы надо контролировать самому.
Кстати, ничто не мешает работать с этими массивами так:
buffer_1[1]=20;
А вот buffer_0 излишен, ибо он mainBuffer и есть :)
Например, есть функция, которая принимает 4 байта и записывает их в память. И чтобы использовать её с буфером, в который считывается дамп памяти, нужно разделить данные по 4 байта. Чтобы эту функцию можно было запихнуть в цикл for.
То есть алгоритм вроде бы простой:
-взять первые четыре байта из массива;
-запихнуть их в функцию для записи;
- взять следующие четыре байта из массива;
-запихнуть их в функцию для записи;
и т.д.
Объявление функции покажи, пж - как она принимает 4 байта? Это 4 разных параметра, или четырехбайтовая переменная, или просто - указатель на массив? Если последнее, то с точки зрения С++ нет разницы, что передавать - можешь передать указатель на первый элемент массива, а можешь - на пятый, и ничего делить не надо. Например:
Например, есть функция, которая принимает 4 байта и записывает их в память. И чтобы использовать её с буфером, в который считывается дамп памяти, нужно разделить данные по 4 байта. Чтобы эту функцию можно было запихнуть в цикл for.
То есть алгоритм вроде бы простой:
-взять первые четыре байта из массива;
-запихнуть их в функцию для записи;
- взять следующие четыре байта из массива;
-запихнуть их в функцию для записи;
и т.д.
junior_developer, давайте разделять понятия "есть" и "можно написать".
По поводу "есть", длина массива даже для Уно, Нано, Мини может быть от 2 до примерно 2000. Длина каждой из частей тоже может быть примерно от 1 до 2000. Итого, на все случаи жизни требуется около 4 миллионов разных функций (это еще если не учитывать Micro, Due, stm32duino и пр.), как Вы думаете, они уже где-то есть готовые?
Ну а по поводу "можно написать" - да, можно. Причем, это совсем не сложно.
А вот функция целиком:
Она из библиотеки https://github.com/miguelbalboa/rfid
Ну и зачем делить массив? Пример - я писал - просто скармливаешь функции указатель на нужный элемент массива:
Большое спасибо всем, кто помог!
Для ясности добавлю ещё образец вызова этой функции
В таком варианте она работает правильно! Пишутся 4 страницы по 4 байта! Кстати под буффер выделено не 16 байтов, а 18!
И код целиком
Нашел его в ответе на вопрос в этом топике
Да, в таком виде код рабочий, но если попробовать записывать не 16 байт, а например 64 - не работает!!!
У меня уже возникло предположение, что тут не обойтись без ещё одного цикла for!
То есть, чтобы получить 64, нужно просто запихнуть этот вызов функции в цикл for и повторить его 4 раза, просто меняя значение указателя!
А под буфер тогда нужно выделить 18*4=72 байта! 16*4=64(под данные) 2*4=8 (для контрольных сумм). Правильно ли я рассудаю?
И ещё обратил внимание на такую деталь: в функции записи есть вот такая закорючка "&", а в функции чтения - нет!
То есть вот так:
Нужна ли она?
И ещё обратил внимание на такую деталь: в функции записи есть вот такая закорючка "&", а в функции чтения - нет!
То есть вот так:
Нужна ли она?
Вам нужно срочно что нибудь почитать ! Пока вас отсюда ссаными тряпками в песочницу не загнали !
[buffer_0 излишен, ибо он mainBuffer и есть :)
Согласен. Ну как бы для наглядности примера
Ну, а в чем наглядность то ? Вот даже не понимаю, это поток мысли, так сказать, или поток желчи ? Или это смесь "мысли так сказать" с желчью ? Не понимаю как вам отвечать. Но в принципе, если сумеете сформулировать мысль, то я вам обязательно отвечу :)
Это мне? Где в моём посте "желчь"??
А она там есть ? Я же и спрашиваю, что это ?