Определение младшего и старшего байта числа типа int. Нужна подсказка
13.06.2013, 18:10
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
А сам способ, я считаю, весьма не плох.
|
Способ классный!  Только пользоваться им нельзя, по причине, верно отмеченной _Артём_'ом. Если бы не эта беда, то цены б ему не было! Красиво, изящно... вот только, блин, не сработает и никому не скажет же...
__________________
There's always more than one way to skin a cat.
|
|
|
|
13.06.2013, 18:34
|
|
|
Вид на жительство
Регистрация: 03.06.2010
Сообщений: 451
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от tempora
|
|
Только пользоваться им нельзя, по причине,...
|
Вот сразу после такого заявления, хотелось бы увидеть альтернативный, рабочий способ.
|
|
|
|
13.06.2013, 18:52
|
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от terminator_seva
|
|
Вот сразу после такого заявления, хотелось бы увидеть альтернативный, рабочий способ.
|
Абсолютно системно-независимый вариант - двигать вправо (на сколько нужно) и брать младший байт (неявным преoбразованием int-›char).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
13.06.2013, 19:16
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
А как же "индейцы"?
|
|
|
|
13.06.2013, 20:06
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от tempora
|
Красиво, изящно... вот только, блин, не сработает и никому не скажет же...
|
Ну всё же не так всё плохо - на распространёных системах только little endian остался. Так для x86, AVR, Cortex-M0/3/4. Мне другие и не нужны.
|
|
|
|
13.06.2013, 20:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от _Артём_
|
|
Ну всё же не так всё плохо ...
|
Именно так плохо. Если задача состоит в том, чтобы получить младший байт, то писать код, который берёт байт по младшему адресу - это ставить грабли, себе самому или тому, кто будет сопровождать этот код после тебя. Тем более, когда это оформляется макросом - он же потом будет "гулять" по всем будущим исходникам.
Любителей граблей разубеждать ни в чем не собираюсь, лишь хотел предупредить того, кому так мило "посоветовали".
__________________
There's always more than one way to skin a cat.
|
|
|
|
Сказали "Спасибо" tempora
|
|
|
13.06.2013, 21:33
|
|
|
Гражданин KAZUS.RUN
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
С риском быть заплеваным 
МикроЕ Бейсик
Int переменная 16 бит
А переменная типа байт
Б переменная типа байт
А = Hi(Int) Пишем А в ЕЕПРОМ
Б = Lo(Int) Пишем Б в ЕЕПРОМ
Обратно
Hi(Int) = ЕЕПРОМ читать байт А
Lo(Int) = ЕЕПРОМ читать байт Б
Какого Хъя музикальными знаками пользоватся ? А ?
Последний раз редактировалось 3d cube; 13.06.2013 в 21:48.
|
|
|
|
13.06.2013, 22:58
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от tempora
|
|
Именно так плохо. Если задача состоит в том, чтобы получить младший байт, то писать код, который берёт байт по младшему адресу - это ставить грабли, себе самому или тому, кто будет сопровождать этот код после тебя.
|
Как вы видите решение этой проблемы?
Мне кажется, что решением будет следование установленным правилам записи/чтения чисел (правила можно установить самому).
например записываем 4-байтовое целое как 4 последовательных байта - старший байт по младшему адресу (или наоборот):
|
Код:
|
unsigned long GetWord(unsigned char *ptr)
{
unsigned long result=0;
result+=((unsigned long)(*ptr++))‹‹24;
result+=((unsigned long)(*ptr++))‹‹16;
result+=((unsigned long)(*ptr++))‹‹8;
result+=((unsigned long)(*ptr++));
return result;
} |
Последний раз редактировалось _Артём_; 13.06.2013 в 23:00.
|
|
|
|
14.06.2013, 10:13
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от _Артём_
|
|
Ну всё же не так всё плохо - на распространёных системах только little endian остался. Так для x86, AVR, Cortex-M0/3/4. Мне другие и не нужны.
|
Вот и я о том же. На подавляющем большинстве систем используемых именно для встроенных систем применяется именно little-endian т.е. от меньшего к старшему. Другие же варианты более присущи форматам хранения данных на различных носителях или передачи данных.
Если Вы беспокоитесь о переносимости всегда можно применить директивы условной компиляции.
А перейти с одной платформы на другую, только перекомпиляцией программы все равно не получится. Как минимум прийдется подстраиваться под местную периферию.
|
|
|
|
14.06.2013, 10:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Кстати у Кортекса есть замечательная команда, о которой правда не подозревают компиляторы
Operation
SBFX extracts a bitfield from one register, sign extends it to 32 bits, and writes the result to
the destination register.
UBFX extracts a bitfield from one register, zero extends it to 32 bits, and writes the result to
the destination register.
Restrictions
Do not use SP and do not use PC.
Condition flags
These instructions do not affect the flags.
Examples
SBFX R0, R1, #20, #4 ; Extract bit 20 to bit 23 (4 bits) from R1 and sign
; extend to 32 bits and then write the result to R0.
UBFX R8, R11, #9, #10 ; Extract bit 9 to bit 18 (10 bits) from R11 and zero
; extend to 32 bits and then write the result to R8
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:48.
|
|