Hi duro, On Sat, Oct 16, 2010 at 11:39 PM, duro <[email protected]> wrote: > Hello. > > Is there a possibility to convert type <class > 'sage.monoids.string_monoid_element.StringMonoidElement'> to Integer > in efficient way?
Yes, there two ways to do what you want. > I've generated some random bits by calling > blum_blum_shub(length,lbound,ubound) but I need the binary result (or > rather the StringMonoidElement) to be represented as a decimal number. Here are two ways, assuming that you want the bits in little-endian order, i.e. you read the bits from right to left in increasing order of powers of 2. sage: version() 'Sage Version 4.5.3, Release Date: 2010-09-04' sage: from sage.crypto.stream import blum_blum_shub sage: b = blum_blum_shub(length=6, lbound=10**4, ubound=10**5); b 100110 sage: type(b) <class 'sage.monoids.string_monoid_element.StringMonoidElement'> sage: # read in little-endian order sage: # conversion using Python's built-in int() sage: int(str(b), base=2) 38 sage: # conversion using Sage's built-in Integer() sage: Integer(str(b), base=2) 38 Now assume you read the bitstring as output by blum_blum_shub() in big-endian order, i.e. from left to right in increasing order of powers of 2. You simply convert the bitstring to a string, reverse that string, and apply any of the above two methods. sage: # reversing a string sage: str(b) '100110' sage: str(b)[::-1] '011001' sage: # read in big-endian order sage: int(str(b)[::-1], base=2) 25 sage: Integer(str(b)[::-1], base=2) 25 -- Regards Minh Van Nguyen -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/sage-support URL: http://www.sagemath.org
