![]() |
|
Модераторы: bsa |
![]()
|
|
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Привет.
Кодю под микроконтроллер на си. Есть массив
Ести ли функция что бы проверить что в массиве все 1 или если в массиве все нули, то проверить что все нули? Что бы не писать циклами. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 2 Всего: 37 |
Почему бы не хранить это в 8 байтах битами? И проверять будет проще... Функции, конечно, нет такой
Можно memcmp приспособить
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
http://ideone.com/wUGNRI И, да.. Это будет работать только если в массиве либо 0 либо 1. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
|
|||
|
||||
| TarasProger |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Это только циклами. Цикл может быть спраятан в функцию, но ведь функция - это не заклятье, её надо реализовать. Ну ещё для меланьких разрядностей и маленького количества элемента можно перетипизировать указатель на масив типом, чья разрядность покрывает весь массив.
Это сообщение отредактировал(а) TarasProger - 5.8.2015, 18:57 |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Грязный хак и не должен работать на всём подряд, так как импользуеет для "оптимизации" под вполне определённую целевую платформу только её же особенности. Я сразу предупредил, что способ грязен и в приличном коде не уместен.
Добавлено @ 14:40 А что, кроскомпиляторы не раализуют сёвые типы? Добавлено @ 14:40 А это то здесь каким боком? Это сообщение отредактировал(а) TarasProger - 6.8.2015, 14:45 |
|||
|
||||
| supercelt |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
не работает ( Странная штука, я вот делаю вот так:
buffer содержит в себе : {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} И прикиньте. Тоже не работает, хотя по описанию функции, если массивы равны, то должно выполнится условие Это сообщение отредактировал(а) supercelt - 11.8.2015, 13:04 |
||||||
|
|||||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
supercelt, вам не приходила мысль что если не работает ни memchr , ни memcmp , значит ошибка где-то в другом месте? например буфер не содержит всех единиц, или буфер содержит, но вывод выдает не туда, не так, не там..., и т.д, и т.п. Под отладчиком не пробовали смотреть? |
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
volatile, Так я и смотрел под ним. И массивы точно совпадают. В просмотрщике переменных видно, буфер забит единицами. Запускаю отладчик по шагам. Курсор приходит на условие сравнивает массивы и выходит из условия, не выполняя то что в нём.
Я тут ещё вычитал что нужно инклудить memory.h, когда используешь ф-ии mem. Хотя на другом сайте написано, что достаточно включить string.h В библиотеке атмела memory.h нету вообще. Погуглил, нигде нету этой библиотеки для СИ Это сообщение отредактировал(а) supercelt - 11.8.2015, 17:54 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
supercelt, оно бы просто не скомпилилось, если бы не хватало нужных инклудов раз скомпилилось значит все норм. Насчет атмеловского компилера, там довольно кривенький компилер. нельзя зайти в саму функцию memchr или memcmp? может там какие-то заглушки вместо них? Вот, у мелкомягких взял простейшую реализацию этих функций. поставь их (переименуй если надо). Если с этими все ок, значит проблема с атмеловским компилером. (верней с его CRT)
По крайней мере с этими ты пошагам сможешь пройти, и посмотреть что происходит. Это сообщение отредактировал(а) volatile - 11.8.2015, 18:51 |
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
спасибо большое memcmp работает. Я так понял что она возвращает 0, если массивы равны да?
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
да в гугле набираешь одно слово memcmp, первая же ссылка http://www.cplusplus.com/reference/cstring/memcmp/ лучше вряд ли кто объяснит. (совет |
|||
|
||||
| TarasProger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Какое дело может быть в инкладе? А очень простое: функция может быть не известна компилятору. Но тогда код бы не скомпилировался. Значит декларация или дублирована в заинклаженной голове, или та голова сама инкладит нужную. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |