Попытка получить 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

Похоже, было бы неплохо прочитать побитовые операции:)

Другие вопросы по тегам