Страница: 1 |
Страница: 1 |
Вопрос: Помогите с системой Счисления !!!
Добавлено: 08.08.07 15:12
Автор вопроса: Aganemnam | Web-сайт:
Доброго времени суток, Программисты!
у меня есть токой вопрос:
есть число, скажем : 02672550300863620295
Надо перевести ето число в 16 -тиричную систему счисления! Пробовал так:
x=hex("02672550300863620295")
Пишет "Overflow" (Переполнение)!!
Что делать ???? помогите с кодом!!! длина числа минимальная 20 символов!!! спасибо за внимание!
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #1
Добавлено: 08.08.07 16:04
Что-то типа:
Dim lngIndex As Long, lngCount As Long
Const HexChars = "0123456789ABCDEF"
strHexString = Replace(strHexString, " ", ""
If Len(strHexString) Mod 2 = 1 Then Exit Function
strHexString = UCase(strHexString)
HexEx = ""
lngCount = Len(strHexString) / 2
For lngIndex = 1 To lngCount
HexEx = HexEx + Chr(16 * (InStr(1, HexChars, Mid$(strHexString, lngIndex * 2 - 1, 1)) - 1) + (InStr(1, HexChars, Mid$(strHexString, lngIndex * 2, 1)) - 1))
Next
End Function
Номер ответа: 2
Автор ответа:
Aganemnam
ICQ: 269000203
Вопросов: 2
Ответов: 5
Web-сайт:
Профиль | | #2
Добавлено: 09.08.07 08:57
Увожаемый ZagZag , вы сами пробовали этот код на исполнение ??? просто у меня эта функция ничего не возвращяет!!
Вот что я написал :
Private Sub Command1_Click()
Text2.Text = HexEx(Text1.Text)
End Sub
Public Function HexEx(strHexString As String) As String
Dim lngIndex As Long, lngCount As Long
Const HexChars = "0123456789ABCDEF"
strHexString = Replace(strHexString, " ", ""
If Len(strHexString) Mod 2 = 1 Then Exit Function
strHexString = UCase(strHexString)
lngCount = Len(strHexString) / 2
For lngIndex = 1 To lngCount
HexEx = HexEx + Chr(16 * (InStr(1, HexChars, Mid$(strHexString, lngIndex * 2 - 1, 1)) - 1) + (InStr(1, HexChars, Mid$(strHexString, lngIndex * 2, 1)) - 1))
Next
End Function
После этого мой Текстбокс2 ="" (Пусто!)
мы бы не могли пообщятся в онлайн режиме !!!
Мой UIN 269000203 ник Aganemnam!!! спасибо за внимание!
Номер ответа: 3
Автор ответа:
Aganemnam
ICQ: 269000203
Вопросов: 2
Ответов: 5
Web-сайт:
Профиль | | #3
Добавлено: 09.08.07 09:03
Могу привести примеры:
1-исходное число 2 - число в НЕХ формате!
02085983972146825535 1CF2E75EE2F8493F
06942430260623839332 6058778A1A681064
01620636916427145303 167DA8B061864057
Эти числа кодированы простым windows-ским калькулятором!! Что нить дельное напешите плз!!
На Visual Basic!!(другие языки только-только изучаю!) еще раз спасибо !
Номер ответа: 4
Автор ответа:
K-Unit90
Вопросов: 4
Ответов: 22
Web-сайт:
Профиль | | #4
Добавлено: 09.08.07 09:08
Про переполнение... Там скорее всего переменную надо было изменить на
более вместительную. Попробуй as Single
Номер ответа: 5
Автор ответа:
Aganemnam
ICQ: 269000203
Вопросов: 2
Ответов: 5
Web-сайт:
Профиль | | #5
Добавлено: 09.08.07 09:37
K-Unit90 !!! пробовал!!
Та же фигня! тока как я понял это дело не типе переменной а в команде "HEX(переменная)"! по моему его возможности сильно ограничены!! точнее от 58,000,000,000 до - 58,000,000,000!
а мой диапазон никак не входит в этот!!
У меня встречный вопрос :
Как организован windows-ский калькулятор??? он же переводит токие числа!!! примеры переведениы им!
Thanks a lot!
Номер ответа: 6
Автор ответа:
K-Unit90
Вопросов: 4
Ответов: 22
Web-сайт:
Профиль | | #6
Добавлено: 09.08.07 09:49
Хм... Ну калькулятор винды по-моему для вычисления огромный чисел
использует переменные типа Long or Single... Попробуй лонг Тоже
неплохое вместилище для чисел, но Сингл по-моему лучше...
Номер ответа: 7
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #7
Добавлено: 09.08.07 15:21
Я привел код не тот. То что я привел переводит HEX в массив байтов.
В твоем случае наверное не обойтись без длинной арифметики.
Номер ответа: 8
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #8
Добавлено: 10.08.07 16:48
Function dec_to_hex$(dec$)
'
Dim c_dec$, n_dec$
Dim s_dec&
Dim result$
'
c_dec = dec
result = ""
'
Do
Dim i&
Dim i_max&
'
i_max = Len(c_dec)
n_dec = ""
s_dec = 0
'
For i = 1 To i_max
'
s_dec = CLng(s_dec & Mid$(c_dec, i, 1))
'
n_dec = n_dec & (s_dec \ 16)
s_dec = s_dec Mod 16
'
Next i
'
Do While Mid$(n_dec, 1, 1) = "0": n_dec = Mid$(n_dec, 2): Loop
c_dec = n_dec
'
result = Hex$(s_dec) & result
'
Loop Until c_dec = ""
'
dec_to_hex = result
'
End Function
(c) 2007. ostgals.
Есси нужны комменты, стучите в Скайп - ник: ostgals