Как выделить байт из числовой переменной?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Как выделить байт из числовой переменной?

Сообщение Ruslan2000 » 12.08.2009 (Ср) 15:51

Привет. Подскажите, пожалуйста как будет выглядеть строка присваивающая переменной типа byte значение одного из байтов переменной типа long. Помидорами прошу не кидать.
Как вариант - можно пригласить попа, освятить комп, вдруг это демоны?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как выделить байт из числовой переменной?

Сообщение Хакер » 12.08.2009 (Ср) 16:28

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как выделить байт из числовой переменной?

Сообщение alibek » 12.08.2009 (Ср) 16:28

Можно создать UDT из четырех байтовых мемберов (или из одного байтового массива на 4 элемента) и присвоить ее переменной Long через LSet.
Можно присвоить байтовому массиву через GetMem или CopyMemory, после чего получить нужный элемент массива.
Можно извлечь нужный байт с помощью логических операций (AND и умножение/деление).
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как выделить байт из числовой переменной?

Сообщение Денис » 13.08.2009 (Чт) 10:29

Есть еще вариант. Только в качестве иллюстрации, так как вышеописанный способ с LSet гораздо правильнее (и кода меньше)
Код: Выделить всё
Option Explicit

Private Sub Form_Load()

Dim A1 As Long
Dim A2 As Byte
Dim S1 As String

'Строковый буфер
S1 = String(8, "0")

'Число long
A1 = 2147483647

'Конвертация
Mid$(S1, Len(S1) - Len(Hex$(A1)) + 1, Len(Hex$(A1))) = Hex$(A1)
Debug.Print S1

'извлекаем второй байт
'1 - четвертый, 3 - третий, 5 - второй, 7 - первый
A2 = Val("&h" & Mid$(S1, 5, 2))
'                        ^
'Наше число Byte
Debug.Print A2

End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как выделить байт из числовой переменной?

Сообщение Viper » 13.08.2009 (Чт) 16:28

Денис писал(а):Есть еще вариант. Только в качестве иллюстрации, так как вышеописанный способ с LSet гораздо правильнее (и кода меньше)
Такой вариант можно использовать лишь в качестве иллюстрации того, как не надо делать!
Весь мир матрица, а мы в нем потоки байтов!

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Re: Как выделить байт из числовой переменной?

Сообщение Ruslan2000 » 13.08.2009 (Чт) 16:37

Спасибо. Я задавал вопрос с целью узнать существует ли оператор типа строкового Mid, только для побайтовых операций, который я не смог найти. С написанием процедурок по 20-30 строк делающих это я справлюсь сам.
Как вариант - можно пригласить попа, освятить комп, вдруг это демоны?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как выделить байт из числовой переменной?

Сообщение iGrok » 13.08.2009 (Чт) 17:06

Ruslan2000 писал(а):Спасибо. Я задавал вопрос с целью узнать существует ли оператор типа строкового Mid, только для побайтовых операций, который я не смог найти. С написанием процедурок по 20-30 строк делающих это я справлюсь сам.

Каждый из способов, описанных alibek'ом, занимает не более 2х строк. Способ с логическими операциями - не более 3х.
Что ты собираешься делать на 20-30 строках мне пока не понятно.
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Как выделить байт из числовой переменной?

Сообщение SLIM » 13.08.2009 (Чт) 20:11

Viper писал(а):Такой вариант можно использовать лишь в качестве иллюстрации того, как не надо делать!

При всем уважении Viper прав.
Ruslan2000 писал(а):Я задавал вопрос с целью узнать существует ли оператор типа строкового Mid, только для побайтовых операций, который я не смог найти

Mid - не оператор. И не существует ф-й, способных обрезать какую-то переменную на части.

Изучай логические операции, и сразу станет легче. И Хакер дал тебе хорошую ссылку, и Алибек. Да у тебя тут материала - лопатить не перелопатить

З.Ы. Набери в Immedate окне
151 and 1
и
151 and 2
К примеру
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как выделить байт из числовой переменной?

Сообщение Хакер » 13.08.2009 (Чт) 20:14

Не логические, а bitwise. Первых в VB даже нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как выделить байт из числовой переменной?

Сообщение Денис » 14.08.2009 (Пт) 8:31

как не надо делать
как не надо делать

Друзья! Ну вы же знаете, как я программирую!
Изображение
bash.org.ru писал(а):Andrey: привет, ты слыша про такую штуку - дикое программирование?

Juriy: Порвать на себе тельняшку, укусить менеджера, отобрать ноутбук, забиться в угол рычать и писать код?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList