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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HEX - to - String... DEC.... и т.п. Перевод типа данных 
:(
    Опции темы
starley440
  Дата 26.10.2004, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть ли команда для перевода типа данных из HEX в любой другой?
Суть проблемы:
В БД есть столбец с номерами изделий (8-9 знаков)
Номер представляет из себя 3 байта. Последние 2 байта - номер, который напечатан на изделии, а первый байт - номер "зоны" изделия (нигде не напечатан).
Таким образом:
Номер изделия, предположим 10141085
Номер зоны: 154. Номер, который напечатан на изделии: 48541.
---------------------------------------------------------------------------------------
Решение:
1) Номер изделия 10141085 переводим в HEX, получим 9ABD9D
Number=10141085
NumHEX=Hex(Number)
получаем 9ABD9D

2) Делим полученный номер на две части (Зона и номер):
NumZONE=MID(NumHEX,1,2) получаем 9А
NumPPRINT=MID(NumHEX,3,4)
получаем BD9D

И вот тут я попал! Мне никак не перевести номер из HEX в Integer :stena
например:
NumZONEint=Cint(NumZONE) smile=594
Стандартные функции, типа Cint, Cdec... и т.п. не подходят. Везде выдает ошибку типов...
Мне ещё надо поиск по напечатанному на изделии номеру нашаманить.
Перебором ~400К номеров перебирать в цикле - не выход. Должно-же быть что-то стандартное.
Заранее спасибо.

Это сообщение отредактировал(а) starley440 - 26.10.2004, 10:01
PM MAIL WWW ICQ   Вверх
Akina
Дата 26.10.2004, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



NumZONEint=Cint("&H" & NumZONE)



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

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


Новичок



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

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



Огромное спасибо... только вот интересная штЮка...
при номере изделия Number=8369786 получаем NumPrint=-16207 а правильно 49329

Ээээээ..... получается, что-то я упустил и возвращается не верный ответ... Отрицательных вариантов не может быть
Кстати, в калькуляторе всё получается ОК... ;-)

Это сообщение отредактировал(а) starley440 - 26.10.2004, 10:46
PM MAIL WWW ICQ   Вверх
boevik
Дата 26.10.2004, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

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



Объяви NumZONEint как Long и всё будет OK.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
starley440
Дата 26.10.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Абсолютно не ожидал...
Перевёл в текст CStr и всё получилось...
Только с Лонгом... без объявления вообще ерунда получается :)

спасибо

Это сообщение отредактировал(а) starley440 - 26.10.2004, 11:32
PM MAIL WWW ICQ   Вверх
stasic0640
Дата 7.11.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я



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

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



Парни, извените за поднятие темы, но интересует как сделать (чтот башня совсем не варит smile ):

- из НЕХ в DEC:  smile 

Пример: ХЕКС(16символов) - 9B51385F285B1256, что по идее должно получится DEC (20 символов) - 11191788530342498902





С ув. stasic0640

Удачи всем... smile 
PM MAIL   Вверх
Akina
Дата 7.11.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Работа со сверхдлинными числами не поддерживается штатными средствами. Ищи внешние библиотеки или создавай свои.


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

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


Я



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

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



 smile Ох обрадовали... smile 
PM MAIL   Вверх
Akina
Дата 7.11.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ой, да ладно... уж перевод из гексов в десятичку запрограммить - делов на 10 минут.


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

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


Бывалый
*


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

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



вот =)
Код

Private Function Ceil(num As Double) As Long
    Ceil = Int(num)
    If (num - Ceil <> 0) Then
        Ceil = Ceil + 1
    End If
End Function

Private Function Normalize(ByRef aDigits() As Long) As Long
    Dim i As Long
    Dim highest_digit As Long

    For i = 0 To UBound(aDigits)
        If (aDigits(i) > 0) Then
            highest_digit = i
            If (aDigits(i) > 9) Then
                aDigits(i + 1) = aDigits(i + 1) + aDigits(i) \ 10
                aDigits(i) = aDigits(i) Mod 10
            End If
        End If
    Next

    Normalize = highest_digit
End Function

Public Function HexToDec(aHex As String) As String
    If (aHex = "") Then
        HexToDec = ""
        Exit Function
    End If

    Dim chars As String
    Dim result As String
    Dim i As Long
    Dim j As Long
    Dim digits() As Long
    Dim src_digits() As Long
    Dim highest_digit As Long

    chars = "123456789ABCDEF"

    ReDim src_digits(Len(aHex) - 1)
    For i = 0 To Len(aHex) - 1
        src_digits(i) = CLng(InStr(chars, Mid(aHex, Len(aHex) - i, 1)))
    Next

    highest_digit = 0

    ' 1.4 - статистическая величина (объяснить не могу, т.к. сам в непонятках)
    ReDim digits(Ceil(Len(aHex) * 1.4) - 1)
    For i = UBound(src_digits) To 0 Step -1
        digits(0) = digits(0) + src_digits(i)

        If (i <> 0) Then
            For j = 0 To highest_digit
                digits(j) = digits(j) * 16
            Next
        End If

        highest_digit = Normalize(digits)
    Next

    result = ""

    For i = 0 To highest_digit
        result = Trim(Str(digits(i))) & result
    Next

    HexToDec = result
End Function


Добавлено @ 15:14 
Akina
у меня заняло поболее smile 
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
stasic0640
  Дата 7.11.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я



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

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



smile С мя пиффо...  smile

Добавлено @ 15:24 
 smile С мя пиффо...  smile 


Благодарен smile 

Прошу в гости...  smile 
г. Днепр, СЦ Akey
PM MAIL   Вверх
Akina
Дата 7.11.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(JUmPER @  7.11.2006,  16:13 Найти цитируемый пост)
' 1.4 - статистическая величина (объяснить не могу, т.к. сам в непонятках)

должно быть

Код

MaxLen(Dec) = lg(16) * (1 + Len(Hex))


Добавлено @ 17:12 
Цитата(JUmPER @  7.11.2006,  16:13 Найти цитируемый пост)
у меня заняло поболее

Ты обрабатывал краевые и ненормальность


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

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


Бывалый
*


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

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



Akina
 smile точно, а я тут голову ломал... smile 
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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