Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как преобразовать 16-ное выражение в 10-е ? 
:(
    Опции темы
XPurple
Дата 31.5.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Не могу найти, как называется функция , которая преобразует 16-тиричное число к 10-му виду 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
BUGOR
Дата 31.5.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 3
Всего: 16



MsgBox Val("&H" & "ABCDEF" & "&") 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
vbCrLf
Дата 31.5.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



Сорри за оффтоп, но я посмеялся когда читал название темы...
Как преобразовать шестнадцатое выражение в десятое
Блин, народ, выражайтесь яснее!! Я может с мобилы сижу и трачу драгоценный траффик на темы, название которых вводит в заблуждение!  

Это сообщение отредактировал(а) vbCrLf - 31.5.2006, 09:26
PM MAIL ICQ   Вверх
XPurple
Дата 31.5.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



vbCrLf, 
Заголовок короткий
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Akina
Дата 31.5.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



vbCrLf, 
Цитата(XPurple @  31.5.2006,  09:00 Найти цитируемый пост)
16-ное 

никак не разворачивается в шестнадцатое  


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
XPurple
Дата 31.5.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Не получается отследить валидность вводимого текста ввиде код-H или код-в-десятичной-форме.

Задумка такая, чтобы вырезать в тексте любой символ включая спецсимволы.
Причем видимый символ вырезается путем ввода символа, например 'A', а для спецсимволов предназначен ввод в виде 'ASCIIКод-символ H' или в виде 'число', обозначающее ASCII-код этого символа.
Т.е. перевод каретки 0D будет вводиться в виде '0DH' или 'dh' или в числовом виде '13'.
Так вот проблема такая, что при попытке ввода текста в виде '12H', 'A' , '1H', '123' - все нормально, при вводе текста ввиде 'GH' или 'ААА' - type mismatch.
Подскажите, как проконтролировать валидность вводимых значений для функций Int и для преобразования 16-го числа в целочисленный вид ?

Вот код программы

Код

Option Explicit

Dim lnFrom%, lnTo%
Dim i As Integer
Dim FileSource, FileDest As String
Dim Retval, msg
Dim Symbol As String
Dim AsciiCodeSymbol As Integer
Dim SymbolIsValid As Boolean
Dim fso As Object



Private Sub Command1_Click()

FileDest = "file_out.bin"
Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(FileDest) Then
fso.DeleteFile (FileDest)
Else
End If

Select Case Len(Symbol)
Case 1
AsciiCodeSymbol = Asc(Symbol)
SymbolIsValid = True

Case 2 To 3
'Место, где не получается
    If Right(Symbol, 1) = "H" Or Right(Symbol, 1) = "h" Then
     AsciiCodeSymbol = Val("&H" & Symbol & "&")
    Else
     AsciiCodeSymbol = Int(Symbol)
    End If
SymbolIsValid = True

Case Else
msg = MsgBox("Ошибка:" & Chr(32) & "Указано неверное значение вырезаемого символа" & vbCrLf & _
"Указано больше знаков", _
vbExclamation, "Окно состояния")
SymbolIsValid = False
End Select

If SymbolIsValid Then
Retval = Cut_Symbols(FileSource, FileDest, AsciiCodeSymbol)
Else
End If

End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub Dir1_Click()
Dir1.Path = Dir1.List(Dir1.ListIndex)
File1.Path = Dir1.Path
End Sub

Private Sub File1_Click()
FileSource = File1.FileName
End Sub

Public Function Cut_Symbols(ByVal FileFrom As String, ByVal FileTo As String, ByVal SymbolCut As Integer)

lnFrom = FreeFile
On Error GoTo label

Open FileFrom For Binary As #lnFrom
lnTo = FreeFile
Open FileTo For Binary As #lnTo

    'копирование содержимого
    ReDim Buffer(1 To LOF(lnFrom)) As Byte
    For i = 1 To LOF(lnFrom)
    'Get #lnFrom, , Buffer()  ' читаем полностью
    Get #lnFrom, , Buffer(i)
    
    'If Buffer(i) <> CByte(13) Then
    If Buffer(i) <> CByte(SymbolCut) Then
    Put #lnTo, , Buffer(i)
    Else
    End If
    Next
  
Close #lnFrom
Close #lnTo

label:
If Err.Number <> 0 Then
msg = MsgBox("Ошибка открытия " & Err.Number, vbExclamation, "Окно состояния")
Else
msg = MsgBox("Символ" & Chr(32) & "[" & Chr(SymbolCut) & "]" & Chr(32) & "вырезан по всему файлу" & Chr(32) & _
FileFrom & Chr(32) & "успешно." & vbCrLf & "Результат сохранен в файле" & Chr(32) & FileTo, _
vbInformation, "Окно состояния")
End If

End Function

Private Sub Form_Load()
Text1.Text = "A"
End Sub

Private Sub Text1_Change()
Symbol = Text1.Text

End Sub

  

Это сообщение отредактировал(а) XPurple - 31.5.2006, 10:59
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Naghual
Дата 31.5.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



а как отличить "А" от "АА"?
Что из этого строка а что представление числа?
Алгоритм не ясен - как же объяснить его компьютеру? 


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
XPurple
Дата 31.5.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Алгоритм прост, как яйцо:
Если вводится один символ, то подразумевается, что это видимый символ,т.е.  если введен символ A , то считается, что вводится символ 'A' или (chr(65), чтобы было понятней) , если вводится просто 1 - означает число или символ 1 (chr(49) )т.д. 
Если вводится 2 или 3 символа, то вводимое значение определяется либо как decimal Ascii code [10-254], либо как Hex Ascii code, тогда последним вводимым символом будет символ "h" или "H" и полная вводимая строка будет выглядеть либо как '1h' либо '23h', что будет означать '0x1' или '0x23'.
Где-то так. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Akina
Дата 31.5.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(XPurple @  31.5.2006,  11:50 Найти цитируемый пост)
как проконтролировать валидность вводимых значений для функций Int и для преобразования 16-го числа в целочисленный вид ?

Валидным полагается считать любую введенную последовательность символов, которая после удаления пробельных символов в начале и конце состоит только из символов, соответствующих шестнадцатиричным цифрам ([0-9][A-F][a-f]), возможно с одним из префиксов 0x (C-синтаксис), &H (Basic-синтаксис), $ или $H (Pascal-синтаксис), либо с суффиксом H (ASM-синтаксис). Возможны также шаблоны, соответствующие другим языкам.

Проверить на соответствие шаблону несложно. При соответствии отрезать префиск-суффикс, довесить Basic-овское &H и использовать CLng - по-моему несложно... 

Так4 в чем собсно проблема? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
BUGOR
Дата 31.5.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 3
Всего: 16



Чё-т я тоже нихрена не понял, я же дал тебе вначале функцию для преобразования HexToDec, что ещё?smile Я\Вообще код какой-то сумбурный честно говоря, а правильность ввода данных(когда количество инвариантов большое и структура образца не совсем проста) давно пора привыкнуть проверять с помощью регулярных выражений. 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
XPurple
Дата 1.6.2006, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



BUGOR, 
Код как код, ничего сумбурного в нем не вижу. Наоборот упростил интерфейс до минимума, сведя все к 1-ой форме.
Насчет регулярных выражений -надо попробовать. Синтаксис для VB такой же ,что и везде?
Для работы с регулярными выражениями требуется подключать дополнительные References?

Цитата(Akina @  31.5.2006,  14:32 Найти цитируемый пост)
Так4 в чем собсно проблема?  

Проблема одна- пробелы в знаниях функций и методов. Спасибо за пинок в нужном направлении, стало намного понятней.
  

Это сообщение отредактировал(а) XPurple - 1.6.2006, 05:50
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
BUGOR
Дата 1.6.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 3
Всего: 16



Нужно подключить класс:

Project > References > MS VB Regular Expressions

Пример использования поищи на форуме или в сети.

Вот составил выражение, учитывает все условия, которые тебе нужны:

^(0x|\$|\$H|&H)?[0-9A-Fa-f]+(H|h)?$

 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
XPurple
Дата 1.6.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



BUGOR, 
Благодарю за разъяснения. Сам бы я долго разбирался. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.