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

 
 
> вывод через printf переменной unsigned long int, printf
messenger
сообщение Jan 9 2013, 14:01
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Здравствуйте уважаемые пользователи форума!
Столкунлся с проблемой и прошу помощи.
Конроллер ATmega16? среда CVAVR

обявляю прерменную 32 бита
unsigned long int REG_0=0b0...........................................01 (32 бита)
вывожу через printf
printf("REG0= %u ",REG_0);

но явно пропадают первые два старших байта, не могу разобраться как быть.

и насколько правильно выделять из unsigned long int 4 байта типа unsigned char

bait_1=REG_0 & 0xFF;
bait_2=(REG_0>>=8) & 0xFF;
bait_3=(REG_0>>=8) & 0xFF;
bait_4=(REG_0>>=8) & 0xFF;

Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Jan 9 2013, 14:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



%u - это просто "int", который архитектурно-зависимую длину имеет, в Вашем случае 16 бит.
чтобы корректно вывести long int - нужна последовательность %lu

Байты так выделять некорректно - у Вас сдвиг везде на 8. Корректно - на 8, потом на 16, потом на 24. И то лишь в случае, если требуемый порядок следования байт "little endian", то есть первым по порядку следует младший байт.

UPD:
Упс. Извините, не заметил, что там ">>=". Корректно байты выделять так. Но с учетом "little endian", и не факт, что оптимизатор правильно поймет и скомпилирует в оптимальную конструкцию.
Go to the top of the page
 
+Quote Post



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

 


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


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