распечатать в бинарном формате

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

распечатать в бинарном формате

Сообщение dima-pol » 22.11.2011 (Вт) 21:08

Здраствуйте!

Как в VB6 вывести целое число в строковую переменную в бинарном виде?

Спасибо

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.11.2011 (Вт) 22:06

Подозреваю, что только руками...

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

Re: распечатать в бинарном формате

Сообщение Хакер » 23.11.2011 (Ср) 0:15

dima-pol писал(а):Как в VB6 вывести целое число в строковую переменную в бинарном виде?

Пример? И куда вывести?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.11.2011 (Ср) 1:12

Хакер писал(а):Пример? И куда вывести?

:shock: Что тут может быть непонятно?

Код: Выделить всё
Public Function IntToBin(ByVal X As Integer) As String
  If X < 0 Then
    Dim Q As Integer
    IntToBin = IntToBin(Not X)
    For Q = 1 To Len(IntToBin)
      Mid$(IntToBin, Q, 1) = Chr$(Asc(Mid$(IntToBin, Q, 1)) Xor 1)
    Next Q
    For Q = Len(IntToBin) To 15
      IntToBin = "1" & IntToBin
    Next Q
  Else
    IntToBin = ""
    Do
      IntToBin = (X And 1) & IntToBin
      X = X \ 2
    Loop While X
  End If
End Function

Public Sub Main()
  MsgBox (IntToBin(117))
  MsgBox (IntToBin(-117))
  MsgBox (IntToBin(0))
End Sub

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

Re: распечатать в бинарном формате

Сообщение Хакер » 23.11.2011 (Ср) 6:12

Qwertiy писал(а):Что тут может быть непонятно?

Это называется не число в бинарном формате, а текстовое представление числа в двоичной системе счисления.

Это делается это не таким уродским образом, а вот так:
Код: Выделить всё
Function ValueToBinRepresentation(ByVal value As Long) As String
    Const ConvTable$ = "0000000100100011010001010110011110001001101010111100110111101111"
    Dim i As Long, qbitpart As Long, msb As Boolean
    ValueToBinRepresentation = String(32, "0")
    If value And &H80000000 Then
        value = value And Not &H80000000: msb = True
    End If
    For i = 7 To 0 Step -1
        qbitpart = value And &HF: value = value \ &H10
        Mid$(ValueToBinRepresentation, 1 + i * 4, 4) = Mid$(ConvTable, 1 + qbitpart * 4, 4)
    Next i
    If msb Then Mid$(ValueToBinRepresentation, 1, 1) = "1"
End Function
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.11.2011 (Ср) 9:44

Хакер писал(а):Это делается это не таким уродским образом, а вот так:

И чем же это лучше?

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

Re: распечатать в бинарном формате

Сообщение Хакер » 23.11.2011 (Ср) 9:47

Тем, что это не быдлокодерский код.
Он меньше твоего, понятнее твоего, лучше по этим параметрами, и в равных условиях (конвертация всех Long-чисел из диапазона Long-чисел с шагом 1111d) отработал все числа за 9 секунд, против 86 секунд твоего кода.

Вопросы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: распечатать в бинарном формате

Сообщение Хакер » 23.11.2011 (Ср) 9:58

Нет, правда. Человек инвертирует биты в числе, потом получает bin-представление инвертированного числа, потом проходится по строчке с представлением инвертированного числа, меняет символы «0» на символы «1», а символы «1» на символы «0», а потом наращивает ведущие биты префиксируя символы «0» по одному символу в начало строки в цикле?

И хватает совести спрашивать, чем такой подход на замечателен?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: распечатать в бинарном формате

Сообщение dima-pol » 23.11.2011 (Ср) 21:55

Спасибо всем!
Получается, что встроенных средств для вывода в бинарном формате у VB6 нет?

Хакер, я воспользовался Вашей идеей (ConvTable) и попыталься чуть подсократить код:

Код: Выделить всё
Function ValueToBinRepresentation8(ByVal value As Long) As String
    Const ConvTable$ = "000001010011100101110111"
    Dim i As Long, str As String
    str = Oct(value)
    ValueToBinRepresentation8 = ""
    For i = 1 To Len(str)
        ValueToBinRepresentation8 = ValueToBinRepresentation8 & Mid$(ConvTable, 1 + (Asc(Mid$(str, i, 1)) - 48) * 3, 3)
    Next i
    ValueToBinRepresentation8 = String(32 - Len(ValueToBinRepresentation8), "0") & ValueToBinRepresentation8 ' эта команда не обязательна
End Function

Не могли бы его потестить по времени.
Спасибо.

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

Re: распечатать в бинарном формате

Сообщение Хакер » 24.11.2011 (Чт) 3:47

Даже не буду тестить, это отвратительно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 42

    TopList  
cron