Работа с byte-массивами
- Войдите на сайт для отправки комментариев
Чт, 15/03/2012 - 19:10
Здравствуйте!
Есть необходимость присвоить одному byte-массиву другой, т.е.:
byte arr1[8]; byte arr2[8]; ... arr1=arr2;
Такой фокус не проходит. Поэлементное присвоение или перегрузка оператора...это выход, но есть ли метод универсальное?
И еще как сравнить байтовые массивы (не поэлементно)?
только циклом
или
Угу...Наверное это кротчайший вариант.
Ну можно еще вот так ) :
кстати, когда размер массива маленький (к примеру 3) то так проще.
Здравствуйте!
Есть необходимость присвоить одному byte-массиву другой, т.е.:
Такой фокус не проходит. Поэлементное присвоение или перегрузка оператора...это выход, но есть ли метод универсальное?
Так не пробовали?
Здравствуйте!
Есть необходимость присвоить одному byte-массиву другой, т.е.:
Такой фокус не проходит. Поэлементное присвоение или перегрузка оператора...это выход, но есть ли метод универсальное?
Так не пробовали?
о_О.. надо запомнить)
Да, удобный фокус. А как разместить такой массив в энергонезависимой памяти?
EEPROM или где сама программа хранится? Последнее - progmem
в eeprom, а во флеш тоже можно?
в eeprom, а во флеш тоже можно?
константой - чтобы сэкономить ОЗУ.
ЕЕЕПРОМ - куча библиотек, посмотри на EEEPROM2, ей проще сохранять не только байт-представления но и например int, сама два байта ложит/читает.
Здравствуйте!
Есть необходимость присвоить одному byte-массиву другой, т.е.:
Такой фокус не проходит. Поэлементное присвоение или перегрузка оператора...это выход, но есть ли метод универсальное?
Так не пробовали?
о_О.. надо запомнить)
Вот и я когда с этим столкнулся, спросил у знакомого программиста, который пишит на СИ: "Как один массив присвоить другому", а он мне ответил, что только циклом, а теперь, когда я говорю, что есть функция, он мне говорит, что это СИшная функция. Вот не мутант ли... я ему и звонил потому, что он пишет на СИ.
а есть функиция
которая как раз то и делает.что копирует из одного массива букв в другой и возвращает адресс указателя куда был скопирован массив
для сравнения двух массивов
возвращает 0 если массивы идентичны
возвращает значение >0 если str1>str2
возвращает значение <0 если str1<str2
еще удобно в качестве функции сравнения использовать :
функция проверяет есть в нутри массива str1 последовательность в виде str2 и возвращает 1 если есть,и 0 если нет.
Вот и я когда с этим столкнулся, спросил у знакомого программиста, который пишит на СИ: "Как один массив присвоить другому", а он мне ответил, что только циклом, а теперь, когда я говорю, что есть функция, он мне говорит, что это СИшная функция. Вот не мутант ли... я ему и звонил потому, что он пишет на СИ.
Скорее всего он вам сказал что это "библиотечная функция". Или "это функция из стандартных си-шных библиотек".
И все верно он вам сказал - только циклом. Вопрос в том "кто этот цикл написал". Вы лично или взяли наработки предшественников. Внутри эта memcpy, не заклинаниями данные переносит, а именно циклом.
Вот ее реализация
Просто, особенно в случае малого количество ресурсов, лишние библиотеки стараются не подключать, без особой необходимости. Если вам нужно скопировать всего один массив - проще написать цикл, чем тащить всю либу.
Правда в, в случае с ардуино, подключать или нет - за нас уже решили и подключили нам ее насильно (поэтому и пустой скетч имеет далеко не нулевой размер). Поэтому "истинные программеры" и не любят Arduino. Они привыкли сами решать что подлючать, а что нет.
Поэтому он вам и сказал "в ЯЗЫКЕ C" - только циклом. А уж какие либы у вас есть под рукой - он знать не мог (хотя могбы и предположить, и подсказать).
>Вот не мутант ли...
Мутант. Хотите или нет, а професия накладывает психологические деформации. Он дал вам абсолютно формально-правильный ответ. Вот если-бы вы спросили "а существуют ли какие-то библиотеки-функции готовые, для упрощения" - он бы вам рассказал про memcpy :) Тут уж ничего не поделаешь. Нужно делать "поправку на ветер" при общении с нами.
Вот, можете почитать на досуге про программеров: Психологическая деформация программистов. Взгляд с обеих сторон баррикад