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

Reply via email to