首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中整洁的长整型表示

python中整洁的长整型表示
EN

Stack Overflow用户
提问于 2012-03-19 05:08:04
回答 3查看 575关注 0票数 0

我正在用Python编写简单的RSA解密例程(我是Python的新手),似乎找不到一种在我的代码中整洁地格式化长整型的方法。这个整数是2048位长,如果写在一行上,就会延伸到右边很远的地方。在C语言中,这样的整数将由一个单词数组表示,人们可以将其整齐地写在一页上。我该如何在Python中做到这一点呢?我尝试了显而易见的解决方案:

代码语言:javascript
运行
复制
modulus = 0xaaaaa\
bbbbb\
ccccc

这根本不起作用。我发现唯一有效的方法是:

代码语言:javascript
运行
复制
smodulus = "\
aaaaa\
bbbbb\
ccccc"
modulus = long(smodulus,16)

你能推荐一种长整型的格式化方法吗?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-03-19 06:04:05

Python concatenates adjacent string literals,所以你可以这样写:

代码语言:javascript
运行
复制
long('01234567'
     '89abcdef'
     '01234567'
     '89abcdef',
     16)
票数 2
EN

Stack Overflow用户

发布于 2012-03-19 05:23:57

大喊:

代码语言:javascript
运行
复制
modulus =( 0xaaaaaaaa << 64
         | 0xbbbbbbbb << 32
         | 0xcccccccc << 0 )

或者,如果不希望跟踪这些偏移量,可以使用一个简单的帮助器:

代码语言:javascript
运行
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2012-03-19 05:22:46

创建自己的解析字符串的函数,并使用它来定义一个全局变量。

代码语言:javascript
运行
复制
SMODULUS = parse("""
    aaaab
    bbbbb
    ccccc
    """)

def myFunc(...):
    crypomath_and_stuff = SMODULUS | abc & etc
    ...

您也许能够避免将其设置为内联,并避免将其设置为全局变量,但这取决于python解释器是否足够智能,能够将常量函数编译为JIT样式的预处理数据(还取决于python语言的语义是否允许这种优化)。要亲自体验这一点,可以使用dis.dis ( python反汇编程序)来查看是否确实进行了优化(或者更有可能的是,没有进行优化)。如果您根本不关心性能,或者这些是对使用parsed变量的函数的一次性调用,您也可以将其内联。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9762301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档