相关疑难解决方法(0)

为什么printf()在python中给出一个奇怪的输出?

我试图printf()在Linux上的python命令行中使用C函数.为了完成这项工作,我导入了ctypes.我的问题是:如果我创建一个在循环中CDLL使用printf()-function 的对象,我得到一个非常奇怪的输出:

>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6")
>>> for i in range(10):
...     libc.printf("%d", i)
...
01
11
21
31
41
51
61
71
81
91
>>>
Run Code Online (Sandbox Code Playgroud)

但是,当我在函数内部调用此循环时,它按预期工作:

>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6")
>>> def pr():
...     for i in range(10):
...         libc.printf("%d", i)
...     libc.printf("\n")
...
>>> pr()
0123456789
>>>
Run Code Online (Sandbox Code Playgroud)

我猜不出是什么导致了这种行为......
如果重要的话,我在Linux上使用Python 2.7.6.

编辑:

Python版本/操作系统对此没有影响.有关详细信息,请参阅下面的PM 2Ring的答案.在Windows上,您只需将初始化更改libclibc = ctypes.CDLL("msvcrt.dll")where .dll是可选的.获取正确输出比调用函数的另一种方法是将printf()变量值存储在变量中:

>>> …
Run Code Online (Sandbox Code Playgroud)

python ctypes python-2.7

38
推荐指数
2
解决办法
4292
查看次数

持久化 hashlib 状态

我想创建一个hashlib实例,update()然后以某种方式保留其状态。稍后,我想使用此状态数据重新创建对象,并继续update()它。最后,我想获得hexdigest()累计数据的总和。状态持久性必须在多次运行中保持不变。

例子:

import hashlib
m = hashlib.sha1()
m.update('one')
m.update('two')
# somehow, persist the state of m here

#later, possibly in another process
# recreate m from the persisted state
m.update('three')
m.update('four')
print m.hexdigest()
# at this point, m.hexdigest() should be equal to hashlib.sha1().update('onetwothreefour').hextdigest()
Run Code Online (Sandbox Code Playgroud)

编辑:

2010 年,我没有找到使用 python 实现此目的的好方法,最终用 C 语言编写了一个小型辅助应用程序来实现此目的。然而,下面有一些我当时无法获得或不知道的很好的答案。

python hash persistence pickle hashlib

7
推荐指数
1
解决办法
3637
查看次数

用于动态增长/流数据的哈希算法?

是否有任何算法可以从已知的哈希摘要中继续哈希?例如,客户端将一大块文件上传到ServerA,我可以得到md5上传内容的总和,然后客户端将剩余的文件块上传到ServerB,我可以将md5内部状态转移到ServerB并完成散列吗?

基于我多年前在comp.lang.python上发现的md5 有一个很酷的黑魔法黑客,但是它ctypes用于特定版本的md5.so或者_md5.dll,所以它不是用于不同python解释器版本或其他编程语言的可移植代码,除了md5模块自2.5以来在python标准库中已弃用,因此我需要找到更通用的解决方案.

更重要的是,散列的状态是否可以存储在十六进制摘要本身中?(因此,我可以继续使用现有的哈希摘要散列数据流,而不是内部黑客攻击.

任何想法都表示赞赏.提前致谢 :)

python hash md5 data-stream

7
推荐指数
1
解决办法
2410
查看次数

标签 统计

python ×3

hash ×2

ctypes ×1

data-stream ×1

hashlib ×1

md5 ×1

persistence ×1

pickle ×1

python-2.7 ×1