Преобразование разныз типов - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Преобразование разныз типов (Надо выделить полубайты из переменной типа DWORD)
Преобразование разныз типов
Klim Дата: Вс, 29.01.2012, 08:10  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 80
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Есть переменная типа DWORD с содержанием "7DBEEDF7". Как ее разбить на состовляющие? Что получить полубайты отдельно? т.е. 7,D,В,E,E,D,F,7
ЯНДЕКС Дата: 29.01.2012
retas Дата: Вс, 29.01.2012, 12:06  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Dim Wrd as Word
Dim Wrd_H as Wrd.HighByte
Dim Wrd_L as Wrd.LowByte


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
Klim Дата: Вс, 29.01.2012, 12:20  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 80
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

У меня не Word, а Dword. B поэтому LowByte считает только F7 , а HighByte 7D.
mikhail09p Дата: Вс, 29.01.2012, 13:12  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 504
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Может так:

Dim Sostav[8] As Byte

----------------------
Sostav[0] = Wrd Dig 0
Sostav[1] = Wrd Dig 1
----------------------
Sostav[7] = Wrd Dig 7
Klim Дата: Вс, 29.01.2012, 13:24  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 80
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Так протон вообще нt принимает.
Я нашел способ, как разбить побайтно, а вот как разбить байт на полубайт? т.е. имеем 7F надо получить отдельно 7 и F
А DIG работает только с десятичными числами.

Сообщение отредактировал Klim - Вс, 29.01.2012, 13:25
ADMIN Дата: Вс, 29.01.2012, 14:51  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Не принимает потому, что писать нужно так:

Dim Sostav[8] As Byte

Sostav[0] = Dig Wrd, 0
Sostav[1] = Dig Wrd, 1

Чтобы разбить на полубайты:
Dim Var1 as byte
Dim Var2 as byte
Dim TMP as Byte

TMP = $7F

Var1 = TMP >> 4 'Теперь в Var1 цифра 7
var2 = TMP & $0F 'А теперь в Var2 - цифра F
ivan_fd Дата: Вс, 29.01.2012, 14:55  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

ADMIN опередил немного меня.

Code
Dim dwrd As Dword
  Dim wrd1 As Word
  Dim wrd2 As Word
  Dim bte1 As Byte  
  Dim bte2 As Byte  
  Dim bte3 As Byte  
  Dim bte4 As Byte
   
  Dim pb1 As Byte  
  Dim pb2 As Byte  
  Dim pb3 As Byte  
  Dim pb4 As Byte  
  Dim pb5 As Byte  
  Dim pb6 As Byte  
  Dim pb7 As Byte  
  Dim pb8 As Byte  
   
   
   
  begin:
   
  dwrd = $7DBEEDF7
  wrd1 = dwrd.LowWord
  wrd2 = dwrd.HighWord
  bte1 = wrd1.LowByte
  bte2 = wrd1.HighByte
  bte3 = wrd2.LowByte
  bte4 = wrd2.HighByte
   
  pb1 = bte1 >> 4  
  pb2 = bte1 & $F
  pb3 = bte2 >>4  
  pb4 = bte2 & $F
  pb5 = bte3 >> 4  
  pb6 = bte3 & $F
  pb7 = bte4 >>4  
  pb8 = bte4 & $F

  GoTo begin


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Вс, 29.01.2012, 15:03  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Рекомендую последовательно воспользоваться оператором ">>" или "<<". И тогда можно выделить части с любым количеством бит.
Klim Дата: Вс, 29.01.2012, 15:09  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 80
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Спасибо, работает. А где конкретно можно почитать описание данной процедуры? Я имею ввиду >> и & $0F
Сообщение отредактировал Klim - Вс, 29.01.2012, 15:26
ivan_fd Дата: Вс, 29.01.2012, 16:10  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А что здесь читать, это битовая математика. >> значит сдвиг вправо, & логическое И.



Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Вс, 29.01.2012, 16:14
mikhail09p Дата: Вс, 29.01.2012, 19:22  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 504
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Извиняюсь, с ночной смены, ошибся.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Преобразование разныз типов (Надо выделить полубайты из переменной типа DWORD)
Страница 1 из 11
Поиск: