Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2010, 19:00   #1
Digital_Slavik
Новичок
Джуниор
 
Регистрация: 25.12.2010
Сообщений: 3
Смех 2 byte to Word

Уважаемые коллеги! выручайте, простейший вопрос как то поставил в ступор...
Работаю с разными паскалями (Win, ARM, AVR) и везде по разному
подскажите, подтолкните

Имеем
var
adress:word;
x,y:byte;

нужно в адрес запихнуть x y, причем x-старший байт у-младший

В паскалях для микроконтроллеров пишем просто:
Hi(adress):=x;
Lo(adress):=y;
всё...

под Делфёй7 упорно ошибка...

заранее благодарен!
Digital_Slavik вне форума Ответить с цитированием
Старый 25.12.2010, 19:05   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

adress := ((x and $ffff) shl 16) or (y and $ffff);
BOBAH13 вне форума Ответить с цитированием
Старый 25.12.2010, 19:11   #3
Digital_Slavik
Новичок
Джуниор
 
Регистрация: 25.12.2010
Сообщений: 3
По умолчанию

BOBAH13, спасибо конечно что откликнулся, неужто в Дельфе нет четкой команды?
через арифметику это ясненько конечно... но даже в каком то древнем паскале было:
adress.Hi:=x;
adress.Lo:=y;

я в шоке
Digital_Slavik вне форума Ответить с цитированием
Старый 25.12.2010, 20:04   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Может через Move?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 25.12.2010, 21:18   #5
Digital_Slavik
Новичок
Джуниор
 
Регистрация: 25.12.2010
Сообщений: 3
По умолчанию

Да, кстати забыл сказать
в выражении adress := ((x and $ffff) shl 16) or (y and $ffff);
смещаем влево не на 16 бит а на 8, т.е.
adress := ((x and $ffff) shl 8) or (y and $ffff);
иначе получать будем всегда от 0..255

Последний раз редактировалось Digital_Slavik; 25.12.2010 в 22:11.
Digital_Slavik вне форума Ответить с цитированием
Старый 25.12.2010, 21:20   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну да, я чет подумал наоборот, привел пример для когда два слова в двойном слове располагаются. В вашем случае будет не много не так
Код:
adress := ((x and $ff) shl 8) or (y and $ff);
BOBAH13 вне форума Ответить с цитированием
Старый 26.12.2010, 11:49   #7
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

достаточно:
Код:
adress:=x*256+y
можно функцию написать:
Код:
function wcomb(a,b: byte): word;
asm
  mov   ah, dl
end;
...
adress:=wcomb(y,x);
можно немного извратиться:
Код:
  pByteArray(@adress)[0]:=x;
  pByteArray(@adress)[1]:=y;
x128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертировать из строки в byte[] Sparky Общие вопросы .NET 7 11.02.2010 22:44
byte - string fize Помощь студентам 4 10.01.2010 02:33
PAS: byte --> boolean Jean-Esther Помощь студентам 4 02.03.2009 21:29
Array of byte в файл Deight Общие вопросы Delphi 3 05.12.2008 19:10
file of byte medikk Общие вопросы Delphi 1 11.08.2008 16:00