Приветствую уважаемых гуру. Не может ли мне кто нибудь помочь с конвертированием кода на Python в С++?
class ISO7811_2(codecs.Codec):
TRACK1_CHARS = ' !"#$%&\'()*+`,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'
TRACK23_CHARS = '0123456789:;<=>?'
@classmethod
def _reverse_bits(cls, value, nbits):
return sum(
1 << (nbits - 1 - i)
for i in xrange(nbits)
if (value >> i) & 1
)
@classmethod
def _with_parity(cls, value, nbits):
if sum(1 for i in xrange(nbits) if (value >> i) & 1) % 2 != 0:
return value
return value | (1 << (nbits - 1))
@classmethod
def _iso_encode_data(cls, data, mapping, nbits):
def make_data():
lrc = 0
for v in map(mapping.index, data):
lrc ^= v
yield chr(cls._with_parity(v, nbits))
yield chr(cls._with_parity(lrc, nbits))
enc = ''.join(make_data())
return enc, len(enc)
@classmethod
def _iso_decode_data(cls, data, mapping, nbits):
dec = ''.join(
mapping[cls._reverse_bits(ord(c) >> 1, nbits - 1)]
for c in data
)
return dec, len(dec)
@classmethod
def encode_track1(cls, data):
return cls._iso_encode_data(data, cls.TRACK1_CHARS, 7)
@classmethod
def encode_track23(cls, data):
return cls._iso_encode_data(data, cls.TRACK23_CHARS, 5)
@classmethod
def decode_track1(cls, data):
return cls._iso_decode_data(data, cls.TRACK1_CHARS, 7)
@classmethod
def decode_track23(cls, data):
return cls._iso_decode_data(data, cls.TRACK23_CHARS, 5)
@classmethod
def codec_search(cls, name):
return {
'iso7811-2-track1': (cls.encode_track1, cls.decode_track1, None, None),
'iso7811-2-track2': (cls.encode_track23, cls.decode_track23, None, None),
'iso7811-2-track3': (cls.encode_track23, cls.decode_track23, None, None),
}.get(name, None)
codecs.register(ISO7811_2.codec_search)
Из-за того, что с Python ранее не работал, заглядывая каждый раз в мануал по питону, конвертация алгоритма - взрывает мозг и идёт крайне медленно. Если кто-то готов помочь - благодарю, если кто-то готов за денюжку - то готов и за денюжку в разумных пределах.