Функция BIN$

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Функция BIN$

Сообщение BP » 06.09.2004 (Пн) 14:38

Понадобилось тут показывать числа в двоичном представлении. Естественно(почему???) VB такой услуги не предоставляет.
Пришлось написать самому.

Хотелось бы услышать ваши советы по оптимизации. Единственное преимущество тут - безлимитность. Не хотелось бы её потерять.

Код: Выделить всё
'Эта вспомогательна яфункция из моего старого "Конвертера систем счислений"
'Переводит из десятичной в любую систему счисления.
Function FromDEC(Numsys As Byte, Deci As Byte) As String
Dim CnvStr$: CnvStr$ = ""
Do
  Ostatok = Deci Mod Numsys
  Deci2 = Deci - Ostatok
  Deci2 = Deci2 / Numsys
  If Ostatok > 9 Then Osy$ = Chr$((Ostatok - 10) + 65) Else Osy$ = LTrim$(Str$(Ostatok))
  CnvStr$ = Osy$ + CnvStr$
  Deci = Deci2
Loop Until Deci = 0
FromDEC = CnvStr$
End Function

'Эта функция перевод строку, содержащую десятичное число
'в строку с двоичным числом.
Function ToBin(Value As String) As String
Dim RetFunc As String
Value = Hex$(Val(Value))
If Len(Value) Mod 2 > 0 Then Value = "0" & Value

Dim EnumBytes As Long, NextByte As String
For EnumBytes = (Len(Value) - 1) To 1 Step -2
  NextByte = FromDEC(2, Val("&H" & Mid$(Value, EnumBytes, 2)))
  If Len(NextByte) < 8 Then NextByte = String$(8 - Len(NextByte), "0") & NextByte
  RetFunc = NextByte & RetFunc
Next EnumBytes

Dim CutZ As Long
CutZ = InStr(1, RetFunc, "1")
If CutZ > 0 Then RetFunc = Right$(RetFunc, Len(RetFunc) - (CutZ - 1))
ToBin = RetFunc
End Function

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 06.09.2004 (Пн) 14:57

здесь - 9 способов рещения этой задачи

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 06.09.2004 (Пн) 15:52

Спасибо.
А если длинее Long'а? Например 5-ти байтное число. Или если это Integer или Byte?

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

Сообщение alibek » 06.09.2004 (Пн) 16:12

А если длиннее Long, то числом уже не обойдешься (хотя есть Double и Currency), делай String -> Bin.
Lasciate ogni speranza, voi ch'entrate.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 06.09.2004 (Пн) 16:35

Как просто оказывается всё было. А с системами счисления мудрил.

Function GetBit(Value As Byte, Bit As Byte) As Boolean
GetBit = CBool(Value And 2 ^ Bit)
End Function

Хотя проблему длины это не решает. Надо будет это встроке попробовать применить, побайтно считывая числа из строки.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 06.09.2004 (Пн) 16:36

А если к этому делу ещё и XOR применить, то можно редактировать биты в числе.


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

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

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

    TopList  
cron