Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2014, 01:01   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Работа с 16-ти ричными числами

Всем привет и сложнейший вопрос - тема.

Как макросом, формулой выполнить такую задачу(цитата)?

Цитата:
.....Искать по сигнатуре 000024F450000A00.
Это первый элемент массива.
В каждом элементе нас интересуют первые 4 байта, которые представляют собой выдержку в секундах умноженную на 1 миллион. Формат записи Q9.
Например, 0xF4240000 rsh 9 = 0x7A1200 = 8 000 000d / 1 000 000d = (8 сек).
Два других элемента 2-байтовые. 0х0050 / 0х000А = 8. Эти значения более грубые (менее точные) и, судя по всему, служат для связи с другими таблицами и их можно не трогать.
Цветом показал как переставляются числа. Итог - получить значение в секундах.
Для примера приведу несколько чисел.
61AC0A00A09D0A00
F28E0A0059800A00
D5710A0064630A00

Спасибо.
valerij вне форума Ответить с цитированием
Старый 27.03.2014, 02:18   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Например так
Код:
s = "61AC0A00A09D0A00"
s = (StrReverse(s))
s1 = Mid(s, 1, 4)
Dec1 = CLng("&H" & s1)
s2 = Mid(s, 5, 4)
Dec2 = CLng("&H" & s2)
..........................
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.03.2014, 09:07   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

valerij, я смотрю по темам, Вы картинки ковыряете. Есть готовые библиотеки для работы с jpeg, например обсуждение
http://social.msdn.microsoft.com/For...orum=vbgeneral
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 27.03.2014, 10:09   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Например так
Код:
s = "61AC0A00A09D0A00"
s = (StrReverse(s))
s1 = Mid(s, 1, 4)
Dec1 = CLng("&H" & s1)
s2 = Mid(s, 5, 4)
Dec2 = CLng("&H" & s2)
..........................
Сереж, конечный результат - Dec2?
Тогда неправильно считает.
При s = "000024F450000A00"
MsgBox Dec2 = 5, а должно быть 8

При s = "C676D2F24F000A00"
MsgBox Dec2 = 244, а должно быть 7.956795

Цитата:
Сообщение от Казанский Посмотреть сообщение
например обсуждение
Спасибо.
Но, навряд ли я там разберусь.

Последний раз редактировалось valerij; 27.03.2014 в 10:27.
valerij вне форума Ответить с цитированием
Старый 27.03.2014, 11:32   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
s = "000024F450000A00"
s1 = Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
Dec1 = CLng("&H" & s1) / 2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.03.2014, 11:32   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Валера,я пример привел преобразования,а ты даже не вник до конца.
DEc1=8 Dec2=5,где солдатская смекалка?
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.03.2014, 11:56   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Валера,я пример привел преобразования,а ты даже не вник до конца.
DEc1=8 Dec2=5,где солдатская смекалка?
Серёж, я вник, гляди.
s = "000024F450000A00"
s = (StrReverse(s))
MsgBox s '00A000054F420000
Уже не правильно, как получишь число F4240000 ?
Если откинуть 50000A00, то да, получим F4240000
Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
s = "000024F450000A00"
s1 = Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
Dec1 = CLng("&H" & s1) / 2
Так правильно, только нужно разделить на 1000000.

Только теперь как s брать с ячеек, попробую разобраться.

Код:
Sub zxc()
v = 1
1: s = Cells(v, 1)
If s = "" Then
Else:
s1 = Mid(s, 7, 2) & Mid(s, 5, 2) & Mid(s, 3, 2)
Dec1 = CLng("&H" & s1) / 2
Cells(v, 2) = Dec1 / 1000000
v = v + 1: GoTo 1
End If
End Sub

Последний раз редактировалось valerij; 27.03.2014 в 13:45.
valerij вне форума Ответить с цитированием
Старый 27.03.2014, 21:59   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Господа, а скажите, можно Excel -ем пользоваться как калькулятором в режиме Программист?
Когда много 16Н встроенным калькулятором крайне неудобно.
Нет такой надстройки?
valerij вне форума Ответить с цитированием
Старый 28.03.2014, 05:43   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А что Вам мешает использовать функции Excel, такие как "ШЕСТН.В.ДЕС" ("HEX2DEC"), "ДЕС.В.ШЕСТН" ("DEC2HEX") и т. п. ?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.04.2014, 01:51   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Всем привет!!!!!
Опять нужна помощь.
Нужен макрос сложения 16hex числа с константой 5F
В В1 есть число к нему прибавить 5F, результат в В8.....
В В9 = В8+1 и + 5F, и ......
Я попытался сделать через калькулятор, но значений очень много, аж до B2729
В прищепке всё понятнее.

Вот так всё работает, но наверное вы упростите?

Код:
Sub zxc()
Application.EnableEvents = False
    Application.ScreenUpdating = False
s2 = 95: iCor = 7: x = 8: y = 9: iNac = 1
1: s1 = Cells(iNac, 2)
Dec1 = CLng("&H" & s1) + s2
'MsgBox Dec1
Label2 = Hex(Val(Dec1))
'MsgBox Label2
Cells(iNac + iCor, 2) = Label2
Cells(x, 2).Select
    Selection.AutoFill Destination:=Range(Cells(x, 2), Cells(y, 2))
    iNac = iNac + 8: x = x + 8: y = y + 8
    If y > 2729 Then
    Else
    GoTo 1
    End If
Application.EnableEvents = True
        Application.ScreenUpdating = True
End Sub
Спасибо.
Вложения
Тип файла: rar zxc.rar (8.1 Кб, 11 просмотров)

Последний раз редактировалось valerij; 21.04.2014 в 09:56.
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с числами Tecknogleb Помощь студентам 1 02.12.2012 17:50
работа с числами Tata4ka Помощь студентам 1 20.10.2010 16:13
Работа с числами в С++ Mashul'ka Помощь студентам 2 04.11.2009 14:36
Работа с числами Drain Общие вопросы Delphi 10 11.02.2008 16:35