Попытка получить UInt64 в строку base32 ..... работает в python, а не в vb.net - PullRequest
0 голосов
/ 02 марта 2012

Привет, надеюсь, я смогу получить ответ здесь на глупый вопрос.Глупо, потому что мне это объяснили, и я до сих пор не могу понять это правильно.

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 возвращает двойной, когда вы звоните ^, и я должен«сдвигая» его, но не могу понять синтаксис (или найти его) Спасибо за ваше время = + ideas = + help

1 Ответ

3 голосов
/ 02 марта 2012

На этот раз вы делите на 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

Звучит так, будто было бы неплохо прочитать побитовые операции :)

...