Перевод в двоичную в vb6

Содержание

Перевод в двоичную в vb6

unreal666 » 25.12.2004 (Сб) 15:59

Александр80 » 25.12.2004 (Сб) 16:41

Функция CDbl преобразует в Double (двойной)

‘Создай два текстовых поля и кнопку.
‘Cint -Integer (Целый)
‘CDbl-Double (двойной)
Dim a , b
Private Sub Command1_Click()
a = 23
b = 7
Text1.Text = CInt(a / b)
Text2.Text = CDbl(a / b)
End Sub

GSerg » 25.12.2004 (Сб) 16:48

Александр80 » 25.12.2004 (Сб) 16:51

CBool- Boolean (булевой)
CByte — Byte (Байты)
Ccur — Currency (Денежный)
Cdate — Date (Дата)
CDbl — Double (двойной)
Cint — Integer (Целый)
CLng — Long (Длинный)
CSng — Singl (Одинарный)
CStr — String (Строковой)
Cvar — Variant (Вариантный)
CVerr — Error (Ошибка)

GSerg » 25.12.2004 (Сб) 16:54

Александр80 » 25.12.2004 (Сб) 16:58

GSerg » 25.12.2004 (Сб) 17:03

Если бы Пятигорск вместо «Михайло» использовал «Александр», недопониманий было бы меньше

Человек интересуется переводом в двоичную систему, а не в . эээ. двойную aka double
Ему нужно 2 10
3 11
4 100
.

А я просто смотрю, и мысли вслух пощу

Александр80 » 25.12.2004 (Сб) 17:06

GSerg » 25.12.2004 (Сб) 17:08

Александр80 » 25.12.2004 (Сб) 17:55

Александр80 » 25.12.2004 (Сб) 18:25

Переводит значение тз типа Byte (числа от 0 до 255) в тип Binary

Private Sub Command1_Click()
Text2.Text = sBin(Text1.Text)
End Sub

Public Function sBin(ByVal b As Byte) As String
Dim i As Integer

For i = 0 To 7
If b And 2 ^ i Then
sBin = 1 & sBin
Else
sBin = 0 & sBin
End If
Next i
End Function

А как еще можно?

tyomitch » 25.12.2004 (Сб) 19:32

Ещё например так, как показал Zer по ссылке из твоего предыдущего поста.

А твой способ, кстати, будет сильно тормозным из-за возведения в степень.

И ещё, «Binary» — это не тип числа, а его представление . Число м.б. большим либо маленьким, целым либо дробным, и независимо от этого — представленным в любой системе счисления.

Александр80 » 25.12.2004 (Сб) 20:38

Источник

Советы тем, кто программирует на VB & VBA

Андрей Колесов, Ольга Павлова

Совет 322. Получение даты последней коррекции файла

Для работы иногда полезно получить данные о дате создания или последней коррекции файла. Для этого можно использовать функцию FileDateTime(ИмяФайла), например:

С помощью этой же функции можно определить время создания каталога, но следует иметь в виду, что имя каталога в данном случае не должно заканчиваться на обратную косую черту:

Но получить дату создания корневого каталога (то есть диска) с использование FileDateTime нельзя.

Совет 323. Преобразование кода цвета из DOS в Windows

Как известно, в стандартном варианте DOS использовалось 16 цветов, а сейчас в Windows их 16 777 216 (16M). Точнее говоря, такая палитра определяется не операционной системой, а техническими характеристиками мониторов.

Несмотря на такое мощное расширение состава палитры, для решения многих задач бывает удобнее воспользоваться ограниченным количеством цветов. К тому же порой необходимо точно воспроизвести в VB-цвета, которые использовались в DOS (например, при работе с QuickBasic).

В любом случае, возникает задача преобразования кодов цветов из DOS в Windows, которая, казалось бы, легко решается с помощью встроенной функции QBColor:

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

С помощью следующей конструкции:

можно получить таблицу соответствия кодов DOS и Windows.

Windows (Visual Basic)

Код: десятичный (двоичный)

(точный перевод с английского)

Здесь хорошо видны принципы кодирования цветов в DOS и Windows. В обоих случаях цвет задается комбинацией красного, зеленого и синего (Red, Green, Blue). Но в первом варианте используется лишь один разряд (то есть две градации цвета — есть или нет данной составляющей), а во втором — целый байт (256 градаций). В DOS увеличение цветовой гаммы в два раза достигается наличием четвертого разряда, который задает нормальную или повышенную яркость (но не для каждого компонента, а для всей комбинации).

Казалось бы, на этом можно поставить точку, но из таблицы видно некоторое несоответствие в логике преобразования кода. Почти для всех цветов замена кода выполняется по такому правилу: для нормальной яркости двоичный разряд со значением 1 заменяется на &h80, для повышенной яркости — на &hFF. Но имеется также исключение из этого правила для цветов 7 и 8. Следует обратить внимание и на разные названия, например одинаковых цветов, которые используются в английском и русском вариантах Help. Оказывается, это не неточность перевода, а отражение реального несоответствия цветов в DOS и в Windows после преобразования кодов с помощью QBColor.

Визуальное сравнение изображений палитры из 16 цветов, полученных в среде QB и VB, показало заметное расхождение в красках, поэтому мы выполнили следующий эксперимент:

импортировали графический файл с палитрой QB в VB и прочитали RGB-код каждого цвета. По результатам замеров мы сделали свою функцию преобразования кодов цветов из DOS в Windows:

Здесь следует обратить внимание на следующие моменты.

  1. Для нормальной яркости двоичный разряд со значением 1 меняется на &hAA, а для повышенной яркости — на &hFF. Но в последнем случае нулевой двоичный разряд меняется на шестнадцатиричное 55 (в двоичном варианте это выглядит как 01010101).
  2. Как ни странно, код 6 опять отличается от ожидаемой величины (было бы логично увидеть &hAAAA). При этом нужно отметить, что этот код действительно Brown (коричневый) — именно так он называется в QB. В документации VB он именуется как Yellow, что явно не соответствует действительности.

Совет 324. Как отличить обычные элементы управления от компонентов массива

Для того чтобы найти программным образом на форме элемента управления определенного типа, например TextBox, можно воспользоваться следующим кодом:

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

Для обычных элеменов управления она будет выдавать «TextBox», а для компонентов массива — «Object». Программа, которая будет выдавать более точную информацию, может выглядеть следующим образом:

Совет 325. Преобразование числа в двоичное представление и наоборот

В VB (и QB) имеются функции для представления целого числа в символьном виде в восьмеричной (Oct) и шестнадцатеричной (Hex) системах счисления:

Соответственно можно также использовать специальный вид констант для задания чисел в восьмеричном или шестнадцатеричном виде:

Еще раз хотим обратить внимание на нюанс, связанный с преобразованием типов Integer в Long и наоборот. Проблема заключается в том, что мы имеем дело со знаковыми числами, в которых старший, знаковый разряд должен обрабатываться особым образом. Покажем эту ситуацию на примере шестнадцатеричной константы.

Правило формирования константы &H таково: если в ней указано поле приставки менее пяти символов, то формируется переменная Integer, в противном случае — Long. Если необходимо сразу получить тип Long, то константа должна иметь в конце суффикс &.

Соответственно, вы можете получить такой неожиданный результат:

Это объясняется тем, что &hFFFF соответствует значению — 1 (Integer). При переводе этого числа в тип Long получается код &hFFFFFFFF. Если же требуется сформировать число типа Long, в котором два старшие байта были нулевыми, то следует указать суффикс &:

Если число задано в виде символьной записи, то его можно преобразовать следующим образом:

Однако довольно часто бывает полезно представлять числа в двоичной системе счисления. Хотя шестнадцатеричный и восьмеричный вид чисел хорошо показывать двоичную структуру числа, все же такое преобразование требует внимания и не гарантирует от ошибок. Даже опытному программисту может понадобиться некоторое время, чтобы записать число, в котором 7-й, 8-й и 10-й разряды (считая справа! — 1011000000) были бы равны единице, а остальные — нулю.

Для решения этой задачи можно использовать функции iBin% и sBin$, приведенные на листинге 1:

Здесь нужно обратить внимание на то, что значительная часть кода связана с особой обработкой знакового разряда. Мы реализовали эти функции для целой типа Integer, учитывая два обстоятельства.

  1. Именно такой диапазон чисел чаще всего используется для представления в двоичный формат (16 разрядов — это довольно много для визуального восприятия).
  2. Для Long необходимо написать такие функции, чтобы они же по умолчанию работали и для Integer. Все это — из-за автоматического преобразования типов данных при обращении к процедурам и проблем такого преобразования, описанных выше. В этой связи приведем такой пример: строка «1000000000000000» (15 нулей справа) в терминах Integer равна –32768, а Long –32768. Таким образом, для двух типов данных необходимы разные процедуры. (В VB 7 обещано появление Overloading — возможности использования одного и того же идентификатора для обозначения разных процедур. Выбор нужной процедуры зависит от типа аргумента.)

Листинг 1. Функции sBin$ и iBin% — представление числа в двоичной записи и наоборот

Совет 326. Функции с двухсторонним обращением

Довольно часто встречаются случаи парных процедур, которые выполняют связанные как бы прямые и обратные операции. Для удобства работы с ними полезно обозначить один из них идентификатором, при этом конкретная операция должна определяться формой записи:

Примером такого решения является популярная функция Mid:

Обратите внимание, что в первом случае конструкция называется функцией, а во втором — оператором (Statement). Если бы мы писали второй вариант сами, то данная процедура имела бы тип Sub, а ее запись выглядела бы так:

Однако если использовать процедуры типа Property, то можно создать пару таких связанных функций одним именем. Например, мы хотим сделать две процедуры, одна из которых должна выбирать младший байт из длинной переменной, а другая — вставить его обратно:

Обращение к ним будет выглядеть следующим образом:

На самом деле такие связанные функции представляют собой созданные выше iBin% и sBin$ (см. Совет 325). Их можно легко преобразовать в пару процедур Property:

В этом случае обращение к ним будет выглядеть следующим образом:

Совет 327. Преобразование величины размера памяти

В составе Internet Explorer имеется библиотека SHLWAPI.DLL (Shell Windowing API), в которую включена функция, преобразующая число байтов в символьную строку типа «1,41 KB» или «1,32 MB». Обращение к этой функции выглядит следующим образом:

Совет 328. Переключение вида заголовков элемента управления ListView

С помощью приведенного ниже кода можно переключать представление заголовков элемента управления ListView из плоского вида в объемное и наоборот:

Совет 329. Генерация динамических HTML-страниц

Полтора года назад мы опубликовали (КомпьютерПресс 5’99) две статьи, посвященные созданию Web- и DHTML-приложений. Нам удалось создать вполне работоспособные примеры, однако технология разработки показалась нам весьма запутанной. Возможно, создавать динамические HTML-страницы проще с помощью знакомой ASP-технологии? С помощью VB это делается достаточно просто. Ниже приведены содержание ASP-страницы, которое можно сделать с помощью самого простого текстового редактора, и код процедуры, которая используется для генерации HTML-кода.

Тестовая Active Server Page:

Программный код (проект TestASP.DLL, модуль класса Htmlcrt):

В данном случае все выглядит достаточно понятным. Сначала мы создали ActiveX DLL с именем TestASP, в модуле класса Htmlcrt которой написали процедуру WhiteSomeThing (она превратилась, таким образом, в метод объекта TestASP.Htmlcrl). При этом для нашей DLL мы сделали ссылку на библиотеку Microsoft Active Server Page Object Library, чтобы получить доступ к объекту Response. Далее мы написали ASP-страницу с тривиальным скриптом — сначала создается объект TestASP.Htmlcrt. Затем — следует обращение к его методу WhiteSomeThing с передачей объекта Response и некоторого набора параметров. В данном случае передается текстовая строка, которая выводится в HTML-страницу.

Напомним, что обращение к ASP-странице должно выполняться через Internet Infomation Server (NT) или Personal Web Server (Windows 9x). В последнем случае ASP-файл должен быть помещен в одну из папок сервера, обращение к которому из браузера выполняется по адресу http://localhost/MyDir/Test.ASP.

Понятно, что никакого практического применения подпрограмма WhiteSomeThing не имеет, поэтому предлагаем вашему вниманию процедуру ShowRecordSetASP (листинг 2), которая выводит на HTML-страницу содержимое заданного набора данных. Теперь, сделав в ASP обращение к методу ShowRecordSetASP:

с помощью браузера можно будет посмотреть полезную информацию, хранимую на Web-сервере (рис. 1).

Листинг 2. Процедура ShowRecordSetASP выводит содержимое заданного набора данных в виде таблицы

Совет 330. Как отлаживать ASP-скрипты

Отладить процедуры для создания ASP-страниц непросто: необходимо писать код, потом создавать DLL, затем обращаться из браузера к ASP. Увидев ошибки, найти их причину, исправить в VB программу, создать DLL.

С этой проблемой мы столкнулись при разработке довольно простой процедуры ShowRecordSetASP (см. совет 329), решив ее следующим образом.

Мы сделали стандартный VB-проект, в котором создали процедуру ShowRecordSet такого вида:

Так выглядит процедура, формирующая нужный фрагмент кода в виде готового HTM-файла, который сразу можно просматривать браузером. Затем после отладки мы убрали строчки:

и в режиме Replace заменили «Print #1,» на «.Write», а потом давили логические скобки:

Существует еще один вариант разработки кода для ASP-страниц. Делаем такую процедуру, которая формирует автономный HTM-файл:

Подпрограмма MyShowRecordSetMain записывает нужный код в HTM-файл.

Для ASP пишем еще пару подпрограмм:

Совет 331. Как улучшить читаемость кода

Качество оформления программного кода — один из важных факторов, влияющих на эффективность разработки приложений. Прежде, когда программист имел дело с бумажными распечатками кода, считалось, что одна процедура не должна превышать 60-90 строк кода (1-1,5 страницы). Такой объем текста человек может охватить одним взглядом и, таким образом, легко воспринять логику работы данного фрагмента. С внедрением персональных компьютеров необходимость в бумажных листингах отпала, наступило время интерактивной работы с кодом с помощью экрана монитора.

В текстовом режиме экрана (когда мы работали с QuickBasic) мы придерживались правила, что объем процедуры не должен превышать 40-50 строк, то есть занимать не более двух экранных страниц, которые можно легко перелистывать «туда-сюда». Теперь, при работе в графическом режиме программист может гибко управлять размером шрифта и окна с кодом. Но чаще всего приведенные выше пределы числа строк можно рекомендовать и в этом случае.

С размером текста процедур непосредственно связан вопрос навигации между отдельными компонентами VB-проекта. Следует открыто признать, что навигация в VB оставляет желать лучшего. К сожалению, сегодня многие VB-программисты даже не представляют себе, что этот процесс можно сделать более удобным. Довольно удачным примером этого может служить окно выбора нужной процедуры, которое было реализовано в VB 3.0 (рис. 2). Оно гораздо удобнее существующего сегодня Object Browser хотя бы потому, что для модуля формы показываются все реально сформированные процедуры.

Из сказанного выше понятно, что повышение удобства читаемости программного кода связано, в частности, с уменьшением числа строк текста. В этой связи хотелось бы напомнить о возможностях синтаксиса VB, о которых, как выясняется, многие программисты даже не подозревают.

    Возможность написания нескольких операторов в одной строке. Для этого используется разделитель операторов в виде двоеточия. Согласитесь, что такой код:

который читается достаточно хорошо, но при этом занимает меньше строк.

Оператор If . Then . Else может писать в одну строку, причем в последнем случае не нужно использовать закрывающую скобку End If. Вот несколько примеров использования этой возможности:

Совет 332. Проверка на недействительные символы

С этой задачей приходится сталкиваться довольно часто. Самый простой пример — ввод строки, которая должна содержать число. Ранее мы уже приводили простые процедуры собственной разработки, но сейчас хотим показать возможности библиотеки SHLWAPI.DLL, которая входит в состав Internet Explorer:

Совет 333. Проверка дубликатности элементов списка

При добавлении нового элемента списка полезно проверить, не содержит ли он уже такие строки. Это можно сделать с помощью следующего кода:

Совет 334. Как организовать выбор каталога

Мы уже приводили пример решения этой задачи с помощью обращения к DLL-функциям (см. совет 205). Наш читатель Сергей Мичковский предложил более компактный вариант решения этой задачи:

Источник

Поделиться с друзьями
admin
Оцените автора
( Пока оценок нет )
Как переводится?
Adblock
detector