2012-03-01 39 views
0

嗨希望我可以在這裏得到一個愚蠢的問題的答案。 很愚蠢,因爲它已經向我解釋過&我仍然無法理解它。試圖將一個UInt64到一個base32字符串.....作品在python不在vb.net

Python Code: 
sqln = 13173942528351756918 
sqlid = '' 
alphabet = 'abcdfghjkmnpqrstuvwxyz' 
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 = "abcdfghjkmnpqrstuvwxyz" 
For iCount As Integer = 0 To 12 
sqlid = alphabet((sqln/(32^iCount)) Mod 32) + sqlid 
Next iCount 
RESULT: bfpuzytbx3s00 

我懷疑的結果是不同的原因是因爲vb.net當你打電話^,我應該是「換檔」,但似乎無法找出語法(或找到它)返回一個雙 感謝您的時間= +創意= +幫助

回答

3

這一次,你被32 將ICOUNT這由5 * iCount權等同於移

Dim sqln As UInt64 = 13173942528351756918UL 
Dim sqlid as string = "" 
Dim alphabet as String = "abcdfghjkmnpqrstuvwxyz" 
For iCount As Integer = 0 To 12 
    sqlid = alphabet((sqln >> (iCount * 5)) Mod 32) + sqlid 
Next iCount 
Console.WriteLine(sqlid) 

輸出:

bdntyxtax2smq 

這聽起來像這將是對bitwise operations :)

+0

你是男人讀了一個好主意!您只是幫助我對各種報告和連接中使用的Oracle SQL_ID進行反向工程。我現在可以改進我爲Oracle編寫的將SQL Text轉換爲ID的實用程序。我不能夠感謝你。 – 2012-03-01 22:52:30

+0

@GregSimpson:不是問題 - 對於我來說,能夠幫助解決VB問題非常罕見:) – 2012-03-01 22:53:19

相關問題