реклама на сайте
подробности

 
 
> Вопрос по си
Павел_Б
сообщение Jul 22 2011, 16:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 354
Регистрация: 21-11-10
Пользователь №: 61 046



Здравствуйте.
Вопрос чисто по си.
Знаю что писалось уже тысячу раз, но отыскать так и не получилось sad.gif
есть некоторая переменная char temp
нужно условие что старшая тетрада (старшие четыре бита) например равнялись 2
тоесть что-то типа
Код
if (temp ?? 0x20) {}

как сделать?
Подскажите пожалуйста.
Что старшая тетрада равна 2
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hellper
сообщение Jul 22 2011, 16:19
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



(temp >> 4 ) == 2


--------------------
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 26 2011, 16:01
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Hellper @ Jul 22 2011, 20:19) *
(temp >> 4 ) == 2

А таким способом пользоваться не следует. Потому что если придется сравтивать не с 2, а например с 8, то результат будет неправвильным.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 27 2011, 16:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (777777 @ Jul 26 2011, 18:01) *
А таким способом пользоваться не следует.

Совершено нормальный способ. Надо смотреть, что эффективнее ложится на систему команд и оптимизируется. Для, например, старших тетрад 32битников подобный вариант предпочтительней.
QUOTE
Потому что если придется сравтивать не с 2, а например с 8, то результат будет неправвильным.

Проблема ведь не в том, с чем сравнивать, а что сравнивать. Тут со знаком действительно проблема, но скорее всего, автору НУЖНО использовать вместо отданного на откуп компилятору типу char, unsigned тип. Кроме того, сейчас уже char по умолчанию обычно беззнаковый и компилятору можно указать использовать беззнаковый char. Ну или, если уж действительно вдруг нужна работа с signed char или с любым вариантом, то явные преобразования еще никто не отменял.
(temp >> 4 ) == (char)0xF0 >> 4;
будет работать всегда.





--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Павел_Б
сообщение Aug 6 2011, 17:57
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 354
Регистрация: 21-11-10
Пользователь №: 61 046



Уважаемые форумчане, подскажите пожалуйста наиболее оптимальный вариант поиска последовательности нескольких байт.
То есть есть последовательность байт, например
......0x05 0x51 0x12 0x64 0xC0 0x66 0x41..................................................

И вот мне нужно найти начало последовательности 0x64 0xC0 0x66
Как это сделать? smile3046.gif
Спасибо за внимание.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Aug 8 2011, 01:50
Сообщение #6


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Павел_Б @ Aug 6 2011, 13:57) *
Уважаемые форумчане, подскажите пожалуйста наиболее оптимальный вариант поиска последовательности нескольких байт.
То есть есть последовательность байт, например
......0x05 0x51 0x12 0x64 0xC0 0x66 0x41..................................................

И вот мне нужно найти начало последовательности 0x64 0xC0 0x66
Как это сделать? smile3046.gif
Спасибо за внимание.

Почему бы вам не почитать Кнута? Это все такие базовые вещи, что просто стыдно должно быть их спрашивать.

Цитата(777777 @ Jul 26 2011, 12:01) *
А таким способом пользоваться не следует. Потому что если придется сравтивать не с 2, а например с 8, то результат будет неправвильным.

Для арма такой способ эффективнее, т.к. в нем сдвиг в любой инструкции к аргументу бесплатно можно применять.
Go to the top of the page
 
+Quote Post
Павел_Б
сообщение Aug 9 2011, 14:07
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 354
Регистрация: 21-11-10
Пользователь №: 61 046



Как правильно конвертировать шестнадцатиричное число в десятичное?
Другими словами.
Есть переменная int x
оно например имеет значение 1F
а мне нужно его преображзовать в 2 символа char (y,z). где x будет иметь значение 3, а z=1
то есть конвертировать hex в dec
Заранее спасибо всем откликнувшимся.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 9 2011, 14:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Павел_Б @ Aug 9 2011, 18:07) *
нужно его преображзовать в 2 символа char (y,z). где x будет иметь значение 3, а z=1
В Вашем трансляторе отсутствует функция sprintf? Правда, она очень прожорлива к ресурсам МК... Для Вашего случая и собственную функцию написать не сложно. Что-то типа такого:
Код
int x;
char s[2];
s[0]= x/10 + '0';
s[1]= x%10 + '0';
Здесь отсутствует проверка на знак числа х. Кроме того, не подавляется первый ноль, в случае если число х<10, и выдаст неверный результат, если x>99... Доработайте сами под Ваши нужды.
Go to the top of the page
 
+Quote Post
Павел_Б
сообщение Aug 9 2011, 15:07
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 354
Регистрация: 21-11-10
Пользователь №: 61 046



Цитата(Палыч @ Aug 9 2011, 18:51) *
В Вашем трансляторе отсутствует функция sprintf? Правда, она очень прожорлива к ресурсам МК... Для Вашего случая и собственную функцию написать не сложно. Что-то типа такого:
Код
int x;
char s[2];
s[0]= x/10 + '0';
s[1]= x%10 + '0';
Здесь отсутствует проверка на знак числа х. Кроме того, не подавляется первый ноль, в случае если число х<10, и выдаст неверный результат, если x>99... Доработайте сами под Ваши нужды.

Да, спасибо огромное.
Тут ещё вопрос назрел.
Как мне явно указать ячейку памяти в eeprom?
Тоесть в программе будет меняться значение переменной в eeprom. После включения мк должен считать значение из этой ячейки. В связи с чем вопрос.
Если я просто укажу ячейку как
eeprom char j;
И в программе она сменит значение. После нового включения я считаю значение переменной j из eeprom - она возъмёт из той же ячейки?

И правильно ли будет такой алгоритм. Есть таже переменная в памяти eeprom. В обработчике прерываний таймера который работает на высокой скорости я пишу, например:
if (j==0) {zz = 0;}
else {zz = 1;}
Просто насколько мне известно запись в eeprom занимает более 100 циклов тактового генератора. А вот чтение насколько быстро будет выполняться не знаю sad.gif
Спасибо.

Сообщение отредактировал Павел_Б - Aug 9 2011, 15:15
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Павел_Б   Вопрос по си   Jul 22 2011, 16:12
- - Палыч   if ( (temp & 0xF0) == 0x20) {}   Jul 22 2011, 16:17
|- - Павел_Б   Спасибо большое!!!   Jul 22 2011, 16:22
- - Hellper   (temp >> 4 ) == 2   Jul 22 2011, 16:19
|- - Genius1   Цитата(777777 @ Jul 26 2011, 19:01) А так...   Jul 26 2011, 17:09
||- - Палыч   Цитата(Genius1 @ Jul 26 2011, 21:09) Из-з...   Jul 26 2011, 19:20
||- - Genius1   Цитата(Палыч @ Jul 26 2011, 22:20) Из-за ...   Jul 27 2011, 15:09
|- - Палыч   Цитата(Павел_Б @ Aug 6 2011, 21:57) И вот...   Aug 6 2011, 18:14
||- - Павел_Б   Цитата(Палыч @ Aug 6 2011, 21:14) Для так...   Aug 6 2011, 18:19
||- - Палыч   Цитата(Павел_Б @ Aug 6 2011, 22:19) Слава...   Aug 6 2011, 18:26
|||- - Павел_Б   Цитата(Палыч @ Aug 6 2011, 21:26) Да, при...   Aug 6 2011, 18:27
||- - zltigo   QUOTE (Павел_Б @ Aug 6 2011, 20:19) Слава...   Aug 6 2011, 18:42
||- - Павел_Б   Цитата(zltigo @ Aug 6 2011, 21:42) А поду...   Aug 6 2011, 18:53
|- - 777777   Цитата(Павел_Б @ Aug 6 2011, 21:57) Уважа...   Aug 18 2011, 07:15
- - zltigo   QUOTE (Павел_Б @ Jul 22 2011, 18:12) Вопр...   Jul 22 2011, 16:27
- - Idle   CODE$ cat el.c #include <stdlib.h> #in...   Aug 6 2011, 20:57
|- - Павел_Б   Цитата(Idle @ Aug 6 2011, 23:57) CODE...   Aug 7 2011, 02:56
|- - zltigo   QUOTE (Idle @ Aug 6 2011, 22:57) Универс...   Aug 7 2011, 09:11
|- - Idle   Цитата(Idle @ Aug 7 2011, 00:57) пардону...   Aug 20 2011, 19:40
- - ветерок   Код DDRD = ~(1 << 2); А вот эта ...   Aug 7 2011, 05:28
|- - MrYuran   Цитата(ветерок @ Aug 7 2011, 09:28) А вот...   Aug 10 2011, 04:47
- - Idle   выставляет в единицу все биты кроме бита 2, 111110...   Aug 7 2011, 06:58
|- - ветерок   Цитата(Idle @ Aug 7 2011, 10:58) выставля...   Aug 7 2011, 09:31
|- - Genius1   Цитата(ветерок @ Aug 7 2011, 12:31) А что...   Aug 7 2011, 17:18
- - ветерок   Genius1 спасибо MrYuran ,да точно там такая стро...   Aug 10 2011, 11:14
|- - Палыч   Цитата(ветерок @ Aug 10 2011, 15:14) (1 ...   Aug 10 2011, 11:28
- - toweroff   а как в С сделать именно "roll" битов? п...   Aug 10 2011, 16:22
|- - MrYuran   Цитата(toweroff @ Aug 10 2011, 20:22) а...   Aug 10 2011, 16:57
|- - toweroff   Цитата(MrYuran @ Aug 10 2011, 20:57) А ни...   Aug 10 2011, 17:04
|- - sergeeff   Цитата(MrYuran @ Aug 10 2011, 20:57) А ни...   Aug 10 2011, 17:39
|- - toweroff   Цитата(sergeeff @ Aug 10 2011, 21:39) Для...   Aug 10 2011, 17:52
|- - ARV   Цитата(sergeeff @ Aug 10 2011, 20:39) Для...   Aug 11 2011, 04:27
- - дымок   Уважаемые коллеги, возможно ли использование указа...   Aug 11 2011, 16:42
- - zltigo   Для начала задумайтесь над тем, что Вы называете ...   Aug 11 2011, 17:33
|- - дымок   Цитата(zltigo @ Aug 11 2011, 23:33) Для н...   Aug 13 2011, 15:31
|- - _Pasha   Цитата(дымок @ Aug 13 2011, 18:31) Уважае...   Aug 13 2011, 15:38
||- - дымок   Цитата(_Pasha @ Aug 13 2011, 21:38) ...   Aug 13 2011, 16:56
|||- - aaarrr   Цитата(дымок @ Aug 13 2011, 20:56) их был...   Aug 13 2011, 20:11
|||- - дымок   Цитата(aaarrr @ Aug 14 2011, 02:11) Кабы ...   Aug 14 2011, 10:18
|||- - aaarrr   Цитата(дымок @ Aug 14 2011, 14:18) Спасиб...   Aug 14 2011, 12:25
|||- - дымок   Цитата(aaarrr @ Aug 14 2011, 18:25) Не до...   Aug 14 2011, 13:50
||- - aaarrr   Цитата(_Pasha @ Aug 13 2011, 19:38) ...   Aug 14 2011, 14:19
||- - дымок   Цитата(aaarrr @ Aug 14 2011, 20:19) Расск...   Aug 14 2011, 14:58
|- - MrYuran   Цитата(дымок @ Aug 13 2011, 19:31) Забыл ...   Aug 18 2011, 07:27
|- - дымок   Цитата(MrYuran @ Aug 18 2011, 13:27) Кодt...   Aug 18 2011, 15:42
- - Flexz   Возможно, если архитектура поддерживает bit-bandin...   Aug 11 2011, 19:36
- - aaarrr   А volatile действительно нужен? (Сам факт использо...   Aug 14 2011, 15:03
|- - дымок   Цитата(aaarrr @ Aug 14 2011, 21:03) А vol...   Aug 14 2011, 15:09
- - aaarrr   Так он, собственно, и вызывает ругань в 42-х места...   Aug 14 2011, 15:17
|- - дымок   Цитата(aaarrr @ Aug 14 2011, 21:17) Так о...   Aug 14 2011, 15:30
- - дымок   Очень прошу дать ответ на следующий вопрос, почему...   Aug 15 2011, 16:11
|- - Палыч   Из-за приоритета операций. В Вашем случае следует ...   Aug 15 2011, 16:26
|- - дымок   Цитата(Палыч @ Aug 15 2011, 22:26) Из-за ...   Aug 15 2011, 16:49
- - alexeyv   ЦитатаНа эти битовые поля можно использовать указа...   Aug 19 2011, 03:56
|- - MrYuran   Цитата(alexeyv @ Aug 19 2011, 07:56) Вся ...   Aug 19 2011, 05:05
- - alexeyv   ЦитатаПолучаем структуру байтовых флагов. Пожалуйс...   Aug 19 2011, 10:25
- - sergeeff   Нет указателя на бит в байте и нечего тут обсуждат...   Aug 19 2011, 18:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016