Попытка получить UInt64 в строку base32..... работает в python, а не в vb.net
Привет, надеюсь, я смогу получить ответ здесь на глупый вопрос. Глупо, потому что мне это объяснили, и я до сих пор не могу понять это правильно.
Python Code:
sqln = 13173942528351756918
sqlid = ''
alphabet = '0123456789abcdfghjkmnpqrstuvwxyz'
for i in range(0, 13):
sqlid = alphabet[(sqln / (32 ** i)) % 32] + sqlid
RESULT: bdntyxtax2smq
vb.net code:
Dim sqln As UInt64 = 13173942528351756918
Dim sqlid as string = ""
Dim alphabet as String = "0123456789abcdfghjkmnpqrstuvwxyz"
For iCount As Integer = 0 To 12
sqlid = alphabet((sqln / (32 ^ iCount)) Mod 32) + sqlid
Next iCount
RESULT: bfpuzytbx3s00
Я подозреваю, что причина в том, что результаты отличаются, потому что vb.net возвращает удвоение, когда вы звоните ^, и я должен был "сдвинуть" его, но не могу понять синтаксис (или найти его) Спасибо за ваше время =+ идеи =+ помощь
1 ответ
Решение
На этот раз вы делите на 32 iCount, что эквивалентно сдвигу вправо на 5 * iCount
:
Dim sqln As UInt64 = 13173942528351756918UL
Dim sqlid as string = ""
Dim alphabet as String = "0123456789abcdfghjkmnpqrstuvwxyz"
For iCount As Integer = 0 To 12
sqlid = alphabet((sqln >> (iCount * 5)) Mod 32) + sqlid
Next iCount
Console.WriteLine(sqlid)
Выход:
bdntyxtax2smq
Похоже, было бы неплохо прочитать побитовые операции:)