Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2014 15:21:41

Kykyky
Зарегистрирован: 2014-04-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

CRC24

Всем привет, требуется реализовать циклический избыточный код на основе CRC-24, алгоритм нахождения был найден следующий:

def _crc24(data, crc, table):
    crc = crc & 0xFFFFFF
    for x in data:
        crc = table[ord(x) ^ (int(crc>>16) & 0xFF)] ^ ((crc << 8) & 0xFFFF00)
    return crc

В данном алгоритме следующие значения:
Name Identifier-name, Poly Reverse Init-value XOR-out Check
'crc-24', ‘Crc24’, 0x1864CFB, NON_REVERSE, 0xB704CE, 0x000000, 0x21CF02
При проверке файла txt, содержащего “123456789” должен быть результат 0x21CF02.
Найдена следующая таблица для CRC24:
CRC24_TABLE = (
    0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec,
    0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23,
    0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868,
    0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646,
    0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4,
    0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b,
    0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60,
    0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077,
    0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5,
    0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8,
    0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a,
    0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad,
    0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f,
    0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0,
    0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302,
    0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15,
    0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e,
    0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791,
    0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145,
    0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b,
    0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20,
    0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef,
    0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d,
    0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a,
    0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498,
    0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de,
    0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c,
    0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80,
    0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042,
    0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604,
    0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6,
    0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1,
    0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673,
    0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc,
    0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7,
    0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9,
    0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538
)

Затем для считывания из файла применим следующий код:
def _crc24_file(self, filename):
        f = open(filename, 'r')
        return self._crc24(f.readlines())

В новом модуле пропишем:

from module1_py77777 import CRC24
import unittest
class TestCRC24(unittest.TestCase):
    def setUp(self):
        self.crc24 = CRC24()
    def test_crc_file(self):
        expected_crc = '0x21CF02'
        actual_crc = self.crc24.get_crc('C:\\Users\\Admin\\Desktop\\1.txt') // в этой строке ошибка
        self.assertEqual(actual_crc, expected_crc)
if __name__ == '__main__':
 unittest.main()

Как правильно связать весь код и получить в итоге нужный результат? Все делаю в программе PyScripter

Офлайн

#2 Апрель 23, 2014 15:48:10

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

CRC24

with open(filename, 'rb') as fd:
    return self._crc24(fd.read)
Это?

Офлайн

#3 Апрель 23, 2014 18:56:34

Kykyky
Зарегистрирован: 2014-04-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

CRC24

Проблема в том, что я не могу объединить весь код воедино и получить нужный результат

Офлайн

#4 Апрель 23, 2014 19:13:02

Aris_P@
От:
Зарегистрирован: 2010-07-24
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

CRC24

можно взять готовый модуль для расчета всяких crc - https://pypi.python.org/pypi/crcmod/1.7



Отредактировано Aris_P@ (Апрель 23, 2014 19:13:25)

Офлайн

#5 Апрель 23, 2014 19:40:34

Kykyky
Зарегистрирован: 2014-04-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

CRC24

Я оттуда и брал именно расчет CRC 24, в итоге получил следующее
первый модуль:

class CRC24():
    CRC24_TABLE = (
    0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec,
    0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23,
    0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868,
    0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646,
    0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4,
    0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b,
    0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60,
    0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077,
    0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5,
    0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8,
    0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a,
    0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad,
    0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f,
    0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0,
    0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302,
    0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15,
    0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e,
    0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791,
    0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145,
    0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b,
    0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20,
    0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef,
    0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d,
    0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a,
    0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498,
    0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de,
    0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c,
    0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80,
    0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042,
    0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604,
    0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6,
    0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1,
    0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673,
    0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc,
    0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7,
    0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9,
    0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538
)
def _crc24(data, CRC24_TABLE):
    table = CRC24_TABLE
    crc = crc & 0xFFFFFF
    for x in data:
        crc = table[ord(x) ^ (int(crc>>16) & 0xFF)] ^ ((crc << 8) & 0xFFFF00)
    return crc
    def _crc24_file(self, filename):
        f = open(filename, 'r')
        return self._crc24(f.readlines())

Не понимаю как сделать второй модуль, где идет проверка моего файла…
from module1 import CRC24
import unittest
class TestCRC24(unittest.TestCase):
    def setUp(self):
        self._crc24 = CRC24()
    def test_crc(self):
        expected_crc = '0x21CF02'
##        actual_crc = self.crc24._crc24_file('')
##        self.assertEqual(actual_crc, expected_crc)
        with open('C:\\Users\\Admin\\Desktop\\1.txt', 'rb') as fd:
            return self._crc24(fd.read)
        self.assertEqual(_crc24, expected_crc)
if __name__ == '__main__':
    unittest.main()

Как правильно сделать второй модуль, чтобы добиться результата? В готовом модуле очень много всего, я python только 3 раз берусь, поэтому мне нужно максимально упрощенно все сделать..

Офлайн

#6 Апрель 23, 2014 23:01:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

CRC24

Kykyky
первый модуль:
вообще, неплохо было бы сначала написать тест полностью, а потом писать то, что он проверяет, пока он не станет пройденным

класс CRC24 синтаксически неправильно записан



Офлайн

#7 Апрель 24, 2014 23:10:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

CRC24

#!/usr/bin/env python3
 
class CRC24:
 
    def __init__(self):
        self.CRC24_TABLE = (
            0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1,
            0x15aa1a, 0x1933ec, 0x9f7f17, 0xa18139, 0x27cdc2,
            0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23, 0xb8b2d5,
            0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f,
            0x56a868, 0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0,
            0xe2834b, 0xee1abd, 0x685646, 0xf72951, 0x7165aa,
            0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4,
            0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe,
            0xad50d0, 0x2b1c2b, 0x2785dd, 0xa1c926, 0x3eb631,
            0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60, 0x4fd39b,
            0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c,
            0x56e077, 0x681e59, 0xee52a2, 0xe2cb54, 0x6487af,
            0xfbf8b8, 0x7db443, 0x712db5, 0xf7614e, 0x19a3d2,
            0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8,
            0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6,
            0xb4bb1d, 0x2bc40a, 0xad88f1, 0xa11107, 0x275dfc,
            0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad, 0x4f0bba,
            0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099,
            0xf7b96f, 0x71f594, 0xee8a83, 0x68c678, 0x645f8e,
            0xe21375, 0x15723b, 0x933ec0, 0x9fa736, 0x19ebcd,
            0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302,
            0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918,
            0xadc0ee, 0x2b8c15, 0xd03cb2, 0x567049, 0x5ae9bf,
            0xdca544, 0x43da53, 0xc596a8, 0xc90f5e, 0x4f43a5,
            0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a,
            0x641791, 0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f,
            0xb992a9, 0x3fde52, 0xa0a145, 0x26edbe, 0x2a7448,
            0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b,
            0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d,
            0x7045d6, 0x7cdc20, 0xfa90db, 0x65efcc, 0xe3a337,
            0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef, 0xdd5d19,
            0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703,
            0x3f964d, 0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac,
            0x2a3c57, 0x26a5a1, 0xa0e95a, 0x9e1774, 0x185b8f,
            0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498,
            0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132,
            0x693e25, 0xef72de, 0xe3eb28, 0x65a7d3, 0x5b59fd,
            0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c, 0x4ef3e7,
            0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b,
            0x267d80, 0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61,
            0x8b654f, 0x0d29b4, 0x01b042, 0x87fcb9, 0x1883ae,
            0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604,
            0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913,
            0x70d5e8, 0x4e2bc6, 0xc8673d, 0xc4fecb, 0x42b230,
            0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1, 0x26359f,
            0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85,
            0x3f0673, 0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab,
            0x8b2d50, 0x145247, 0x921ebc, 0x9e874a, 0x18cbb1,
            0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7,
            0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4,
            0xc82f22, 0x4e63d9, 0xd11cce, 0x575035, 0x5bc9c3,
            0xdd8538)
 
    def get_crc24(self, data):
        bdata = data.encode('latin1')
        crc = 0xB704CE
        for x in bdata:
            crc = self.CRC24_TABLE[x ^ (crc >> 16 & 0xFF)] ^ \
                  ((crc << 8) & 0xFFFF00)
        return '0x{:X}'.format(crc & 0xFFFFFF)

#!/usr/bin/env python3
 
import unittest
from crc24 import CRC24
 
class TestCRC24(unittest.TestCase):
 
    def setUp(self):
        self.crc24 = CRC24()
 
    def test_crc(self):
        expected_crc = '0x21CF02'
        #print(expected_crc)
        massege = '123456789'
        actual_crc = self.crc24.get_crc24(massege)
        #print(actual_crc)
        self.assertEqual(actual_crc, expected_crc)
 
if __name__ == '__main__':
    unittest.main()

[guest@localhost p3]$ ./test_crc24.py -v
test_crc (__main__.TestCRC24) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
[guest@localhost p3]$

добавил начальное значение только

инфа, взятая из crcmod
таблицу можно генерить
#!/usr/bin/env python3
 
#Name   Polynomial  Reversed?   Init-value  XOR-out     Check
#crc-24     0x1864CFB   False   0xB704CE    0x000000    0x21CF02
 
def _get_buffer_view(in_obj):
    if isinstance(in_obj, str):
        raise TypeError('Unicode-objects must be encoded before calculating a CRC')
    mv = memoryview(in_obj)
    if mv.ndim > 1:
        raise BufferError('Buffer must be single dimension')
    return mv
 
def _bytecrc(crc, poly, n):
    mask = 1<<(n-1)
    for i in range(8):
        if crc & mask:
            crc = (crc << 1) ^ poly
        else:
            crc = crc << 1
    mask = (1<<n) - 1
    crc = crc & mask
    return crc
 
def _mkTable(poly, n):
    mask = (1<<n) - 1
    poly = poly & mask
    table = [_bytecrc(i<<(n-8),poly,n) for i in range(256)]
    return table
  
def _crc24(data, crc, table):
    mv = _get_buffer_view(data)
    crc = crc & 0xFFFFFF
    for x in mv.tobytes():
        crc = table[x ^ (crc>>16 & 0xFF)] ^ ((crc << 8) & 0xFFFF00)
    return crc



Отредактировано py.user.next (Апрель 24, 2014 23:19:00)

Офлайн

#8 Апрель 25, 2014 07:48:59

Kykyky
Зарегистрирован: 2014-04-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

CRC24

class CRC24():
    def __init__(self):
        self.CRC24_TABLE = (
                0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec,
                0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23,
                0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868,
                0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646,
                0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4,
                0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b,
                0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60,
                0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077,
                0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5,
                0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8,
                0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a,
                0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad,
                0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f,
                0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0,
                0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302,
                0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15,
                0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e,
                0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791,
                0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145,
                0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b,
                0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20,
                0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef,
                0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d,
                0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a,
                0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498,
                0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de,
                0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c,
                0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80,
                0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042,
                0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604,
                0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6,
                0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1,
                0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673,
                0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc,
                0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7,
                0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9,
                0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538)
def get_crc(self, data):
    data = bytearray(data)
    crc = 0x00b704ce
    for byte in data:
        crc = (self.CRC24_TABLE[((crc >> 16) ^ byte) & 0xff] ^ (crc << 8)) & 0x00ffffff
    return crc
    print '{:#x}'.format(CRC24().crc24("123456789"))

Второй модуль:

from module1 import CRC24
import unittest
class TestCRC24(unittest.TestCase):
    def setUp(self):
        self.crc24 = CRC24()
    def test_crc(self):
        expected_crc = '0x21CF02'
        print expected_crc
        massege = '123456789'
        actual_crc = self.crc24.get_crc24(massege)
        print actual_crc
        self.assertEqual(actual_crc, expected_crc)
if __name__ == '__main__':
    unittest.main()

Алгоритм в первом модуле все считает правильно.
Можете еще подсказать, как нужно сделать данную строку, чтобы во 2 модуле сравнивало контрольные суммы actual_crc = self.crc24.crc24(massege)
ошибку выдает CRC24 instance has no attribute ‘crc24’

Офлайн

#9 Апрель 25, 2014 13:39:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

CRC24

Kykyky
Алгоритм в первом модуле все считает правильно.
в предыдущем сообщении всё уже считается и проверяется

Kykyky
ошибку выдает CRC24 instance has no attribute ‘crc24’
так его там нет, CRC24 - самодельный класс



Отредактировано py.user.next (Апрель 25, 2014 13:40:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version