Вы можете попробовать выполнить длительные вычисления в потоках (см. JavaScript и Threads ), хотя они не очень переносимы.
Вы также можете попробовать использовать некоторый Javascript-профайлер для найти узкие места производительности. Firebug поддерживает профилирование javascript.
N1 + n11 * 64
blockquote>Выше можно записать как
N1 = N1 + (n11 * 64)
, что совпадает с
N1 + ((Asc(Left(R1, 1)) - 64) * 64)
что совпадает с
(N1 + (Asc(Mid(R1, 2, 1)) - 64) * 64) + ((Asc(Left(R1, 1)) - 64) * 64)
и совпадает с
(Asc(Right(R1, 1)) - 64 + (Asc(Mid(R1, 2, 1)) - 64) * 64) + ((Asc(Left(R1, 1)) - 64) * 64)
Опираясь на эту логику, можно получить то, что вы хотите
[ 1111] Вот функция для этого
Sub Sample() Dim shortdec As Long, dec As Long Dim hexcode As String hexcode = "E0340A" 'hexcode = "E0340B" '<~~ This will give you CPK dec = CLng("&H" & hexcode) '14693386 shortdec = dec - 14680064 '1332 Debug.Print GetString(shortdec) End Sub Function GetString(n As Long) As String Dim i As Long, j As Long, k As Long Dim a As Long, b As Long, c As Long Dim x As Long For i = 65 To 90 For j = 65 To 90 For k = 65 To 90 a = Asc(Chr(i)) - 64 b = (Asc(Chr(j)) - 64) * 64 c = (Asc(Chr(k)) - 64) * 64 x = (a + b) + c * 64 If x = n Then GetString = Chr(k) & Chr(j) & Chr(i) Exit Function End If Next k Next j Next i End Function
Мои предположения: Вы будете использовать заглавные буквы. Иначе вам также придется пройти через ASC 97 - 122.
У вас есть сумма в вашей первой процедуре
N1 = N1 + n11 * 64
, поэтому формулу нельзя отменить!
Представьте, что у вас есть сумма 5 + 4 = 10
. Тогда вы не сможете вернуть его, если знаете только сумму 10
и хотите знать a + b = 10
, тогда существует более одного решения для a
и b
(на самом деле для этого есть бесконечные решения).
Поэтому ответ таков: ваш шестнадцатеричный код не может быть преобразован в 3 буквы.