/ / पायथन में सी लिखित कोड को कैसे परिवर्तित करें [बंद] - पायथन, सी, बिटोरेंट

पाइथन में सी लिखित कोड को कैसे परिवर्तित करें [बंद] - पायथन, सी, बिटोरेंट

क्या कोई समझा सकता है कि वास्तव में क्या हो रहा हैयह कोड इसलिए मैं इसे अजगर में लिख सकता हूं। मुझे बिल्कुल उसी सी लिखित विनिर्देश का पालन करने की आवश्यकता है, इसलिए बाद में इस भाग को बीपी 33 बिट धार डीएचटी के लिए पायथन ब्लूम फ़िल्टर में लागू किया जाएगा

//fixed parameters
k = 2

m = 256*8

//the filter
byte[m/8] bloom   ##

function insertIP(byte[] ip) {

byte[20] hash = sha1(ip)

int index1 = hash[0] | hash[1] << 8 # how to in python?
int index2 = hash[2] | hash[3] << 8

// truncate index to m (11 bits required)
index1 %= m  ## ?
index2 %= m  ## ?

// set bits at index1 and index2
bloom[index1 / 8] |= 0x01 << index1 % 8   ## ??
bloom[index2 / 8] |= 0x01 << index2 % 8   ## ??
}

// insert IP 192.168.1.1 into the filter:
insertIP(byte[4] {192,168,1,1})

मैं इसे नीचे की टिप्पणियों को पाइथन में बदलने की कोशिश कर रहा हूं

 import hashlib
import socket
import struct
class blommy(object):
def __init__(self):
self.bitarray= [0]*2048

def hashes(self,ip):
#convert decimal dotted quad string to long integer"
intip= struct.unpack(">L",socket.inet_aton(ip))[0] #>converting stringt to int
index = [0, 1]
hbyte = hashlib.sha1(intip) # # #sha1 doesnt accept int ? what needs to be done?
index[0] = ord(hbyte[0])| ord(hbyte[1])<< 8
index[1] = ord(hbyte[2])| ord(hbyte[3])<< 8
# how do i shift the bits?

उत्तर:

जवाब के लिए 2 № 1

sha1 पायथन 2.x में सामान्य स्ट्रिंग स्वीकार करता है। आपको socket.inet_aton (ip) से सीधे व्यक्तिगत बाइट्स की आवश्यकता हो सकती है (सुनिश्चित नहीं है कि ऑर्डर आपके एल्गोरिदम के लिए सही है)

बिट बदलावों के लिए, मुझे लगता है कि पाइथन का एक ही वाक्यविन्यास है, लेकिन निष्पादन आदेश के बारे में संदेह में आपको कोष्ठक जोड़ने की आवश्यकता हो सकती है।

इसके अलावा, सी चार int के रूप में कार्य कर सकता है, लेकिन पायथन में आपको हमेशा () और chr () फ़ंक्शंस का उपयोग करके स्पष्ट रूप से उनके बीच रूपांतरित करना होगा।

यहां तक ​​कि चीजें भी %= तथा |= पायथन में काम करेगा।