星期二, 3月 17, 2009

[tips] crc32 in python

python 2.X的crc32實作上跟一般的C實作上在整數有號無號的處理上略有不同, 所以使用python 2.X與一般C實作算出的crc32(如sfv)比對時,通常需要特別的方法,

這邊列出一個透過zlib.crc32快速得到所需要結果的方法:

import zlib

def crc32(st):
crc = zlib.crc32(st)
if crc > 0:
return "%x" % (crc)
else:
return "%x" % (~crc ^ 0xffffffff)

ex1 = "12345"
ex2 = "1kcaseztsa12345azy"

print "%x" % zlib.crc32(ex1)
print crc32(ex1)
print "%x" % zlib.crc32(ex2)
print crc32(ex2)


或如果你有ctypes的話:
import zlib
import ctypes

def crc32_c(st):
return "%x" % ctypes.c_uint32(zlib.crc32(st)).value

ex1 = "12345"
ex2 = "1kcaseztsa12345azy"

print "%x" % zlib.crc32(ex1)
print crc32_c(ex1)
print "%x" % zlib.crc32(ex2)
print crc32_c(ex2)



註: python 3.0以上沒有這個問題.

4 則留言:

Webber 提到...

請問一下一個關於dojo/django/apache

的安裝問題:

1.
我想要使用dojo dijit 在 django template之中, 但是apache總是沒辦法找到dojo的files.

2. 在下的環境設定為 /my_site/site_media/js/dojoXXX/

3. 請問我需要更改urls.py嗎?

4. 我有把/media/ 加在/var/www之下的setting

感謝你的解答...

使徒提姆 !? 提到...

基本上這個主要還是apache的設定問題, 建議你可以先安裝firebug這個firefox的plugin, 在網路這個項目裡看django在哪裡存取dojo的javascript file.

tomubuntu2008 提到...

使徒提姆,距離你對我傳 Python 教中的分支 django 的時間已經過了很久了,我運用我的能力用Python 和 Visualization Toolkit 去創造東西,不知道有沒有什麼傳輸的方式可以把code 給您看?
我的 email 是 d9033075@gmail.com

使徒提姆 !? 提到...

Hi, tomubuntu2008 你好~

Who'sWho上的wiki是不錯的分享地方,不過何不趁這個機會申請一個部落格分享你的心得啊?

如果是自由軟體的話 也可以用google code建立一個自由軟體專案喔~~

http://code.google.com/hosting/createProject