Определение младшего и старшего байта числа типа int. Нужна подсказка
16.05.2013, 09:47
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от oleg110592
|
|
я и сам с трудом понимаю - скопипастил где-то. Надо почитать про указатели. Может гуру подскажут. Особенно ##x непонятно. Подобную конструкцию применял для пиков - работало.
|
##x - стандартная фишка препроцессора, вставка, остальное - указатель с приведением типов на ячейку по адресу. Широко применяется в 32-ух битных МК. Например, в текущей реализации STM32F0XX (подозреваю, что и в STM32F3XX) без подобной конструкции невозможно реализовать 8-ми (и ниже) битный SPI. В то же время, подобная конструкция позволяет свободно манипулировать половинками порта STM32, как двумя разными 8-ми битными портами.
Последний раз редактировалось nahimovv; 16.05.2013 в 09:50.
|
|
|
|
16.05.2013, 09:59
|
|
|
Прописка
Регистрация: 05.01.2013
Сообщений: 195
Сказал спасибо: 11
Сказали Спасибо 24 раз(а) в 21 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от nahimovv
|
|
##x - стандартная фишка препроцессора
|
Ну, то что стандартная, и так понятно, а что эта фишка значит и где ее надо применять?
|
|
|
|
17.05.2013, 08:36
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
electroTrash, читаем мануал на любой компилятор .
Ткнул в первый попавшийся под руку :
|
Цитата:
|
The operator ## placed between two words of the replacement sequence
will concatenate them into a single one. A word may be a parameter but
in such a case, the parameter will not be expanded before beeing concatenated.
#define BIT(var, bit) var.b_ ## bit
will transform:
BIT(port, 3) = 1;
into
port.b_3 = 1;
|
Перевести ?
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 17.05.2013 в 08:45.
|
|
|
|
17.05.2013, 16:38
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от nahimovv
|
|
##x - стандартная фишка препроцессора
|
Это до C99 ( емнип) была " фишка", а теперь - фича.
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.06.2013, 11:05
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Всем добрый день. Может мой ответ и запоздалый. Но, странно, что никто не упомянул об объединении - union.
ведь можно например так:
// определим объединение
union my_union
{
long int A;
char B[4];
} Temp;
далее записав в объединение длинное целое через элемент A , имеем доступ к каждому отдельному байту через член массива B
например запишем:
Temp.A=0x33221100;
Тогда
Temp.B[0] содержит 0x00
Temp.B[1] содержит 0x11
Temp.B[2] содержит 0x22
Temp.B[3] содержит 0x33
С простым целым можно поступать также.
|
|
|
|
13.06.2013, 14:53
|
|
|
Гражданин KAZUS.RUN
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 528
Сказал спасибо: 73
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
ведь можно например так:
// определим объединение
union my_union
{
long int A;
char B[4];
} Temp;
далее записав в объединение длинное целое через элемент A , имеем доступ к каждому отдельному байту через член массива B
|
а не получиться так, что на некоторых компиляторах последовательность массива может не совпасть порядком старших и младших байтов в целочисленной переменной ?
|
|
|
|
13.06.2013, 15:44
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от MaxiMuz79
|
|
а не получиться так, что на некоторых компиляторах последовательность массива может не совпасть порядком старших и младших байтов в целочисленной переменной ?
|
Для стандартного С вариантов не должно быть, это же классика применения объединений. Во всяком случае у меня все работает как положено, применял не однократно.
В конце концов посмотрите того же Шилдта, я думаю Ваши сомнения развеются.
|
|
|
|
13.06.2013, 16:02
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Для стандартного С вариантов не должно быть, это же классика применения объединений.
|
Могут быть различия в системах с разной индианностью. Или я не прав?
|
|
|
|
13.06.2013, 16:40
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от _Артём_
|
|
Могут быть различия в системах с разной индианностью.
|
Приведите конкретный пример, пожалуйста. В смысле какие системы Вы имеете ввиду?
Хотя с другой стороны, какая разница какой порядок байтов. Главное знать этот порядок для своей конкретной системы. А сам способ, я считаю, весьма не плох.
Последний раз редактировалось AlexPi; 13.06.2013 в 17:14.
|
|
|
|
13.06.2013, 17:18
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Приведите конкретный пример, пожалуйста. В смысле какие системы Вы имеете ввиду?
|
http://ru.wikipedia.org/wiki/Big_endian
Сообщение от AlexPi
|
|
А сам способ, я считаю, весьма не плох.
|
Вобщем да.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:01.
|
|