我正在用Python编写简单的RSA解密例程(我是Python的新手),似乎找不到一种在我的代码中整洁地格式化长整型的方法。这个整数是2048位长,如果写在一行上,就会延伸到右边很远的地方。在C语言中,这样的整数将由一个单词数组表示,人们可以将其整齐地写在一页上。我该如何在Python中做到这一点呢?我尝试了显而易见的解决方案:
modulus = 0xaaaaa\
bbbbb\
ccccc
这根本不起作用。我发现唯一有效的方法是:
smodulus = "\
aaaaa\
bbbbb\
ccccc"
modulus = long(smodulus,16)
你能推荐一种长整型的格式化方法吗?
谢谢。
发布于 2012-03-19 06:04:05
Python concatenates adjacent string literals,所以你可以这样写:
long('01234567'
'89abcdef'
'01234567'
'89abcdef',
16)
发布于 2012-03-19 05:23:57
大喊:
modulus =( 0xaaaaaaaa << 64
| 0xbbbbbbbb << 32
| 0xcccccccc << 0 )
或者,如果不希望跟踪这些偏移量,可以使用一个简单的帮助器:
def longmodulus(size, seq):
return sum(leg << offset for leg, offset in zip(seq, xrange(size*len(seq)-size, -size, -size)))
modulus = longmodulus(32,
(0xaaaaaaaa,
0xbbbbbbbb,
0xcccccccc))
发布于 2012-03-19 05:22:46
创建自己的解析字符串的函数,并使用它来定义一个全局变量。
SMODULUS = parse("""
aaaab
bbbbb
ccccc
""")
def myFunc(...):
crypomath_and_stuff = SMODULUS | abc & etc
...
您也许能够避免将其设置为内联,并避免将其设置为全局变量,但这取决于python解释器是否足够智能,能够将常量函数编译为JIT样式的预处理数据(还取决于python语言的语义是否允许这种优化)。要亲自体验这一点,可以使用dis.dis
( python反汇编程序)来查看是否确实进行了优化(或者更有可能的是,没有进行优化)。如果您根本不关心性能,或者这些是对使用parse
d变量的函数的一次性调用,您也可以将其内联。
https://stackoverflow.com/questions/9762301
复制相似问题