On Wed, 4 Jan 2006, John Fouhy wrote:

> On 04/01/06, Terry Carroll <[EMAIL PROTECTED]> wrote:
> > I hope someone more artful than I can show a quick and easy way to convert
> > either '758C87F3' or -1972144115 to the '8A73780D'  that is your goal.
> 
> Hmm, well,
> 
> >>> i = -1972144115
> >>> '%X' % (pow(2, 32)-(~i+1))
> '8A73780D'

Aha, I also figured another way myself in the meantime:

>>> import win32api
>>> CD_Info = win32api.GetVolumeInformation("D:/")
>>> serno = CD_Info[1]
>>> serno_str = "%X" % (0x100000000+serno)
>>> serno_str
'8A73780D'
>>>

> >>> cdi = win32api.GetVolumeInformation('D:/')
> >>> '%X' % cdi[1]
> '49BC31DB'
> 
> So, on my system (ActivePython 2.4, WinXPpro) there is no need for magic.

I think you just got lucky that your first digit (4) was in the range 0-7, 
and so didn't generate a negative.

But you *do* point out a fault in my approach.  I'll give an incorrect
result for a non-negative.  I think the correct way is:

>>> import win32api
>>> CD_Info = win32api.GetVolumeInformation("D:/")
>>> serno = CD_Info[1]
>>> if serno < 0:
...    serno_str = "%X" % (0x100000000+serno)
... else:
...    serno_str = "%X" % serno
...
>>> serno_str
'8A73780D'
>>>


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to