반응형
# CRC-16 LSB 우선 타입 코드 생성 함수
def crc16_lsb_fast(data, poly, init):
polynomial = poly
crc = init
for byte in data:
crc = crc ^ (byte << 8)
for bit in range(8):
if crc & 0x8000:
crc = ((crc << 1) ^ polynomial)
else:
crc = (crc << 1)
return crc & 0xFFFF
# CRC-16 MSB 우선 타입 코드 생성 함수
def crc16_msb_fast(data, poly, init):
polynomial = (int('{:08b}'.format(poly)[::-1], 2))
crc = (int('{:08b}'.format(init)[::-1], 2))
for byte in data:
crc = crc ^ byte
for bit in range(8):
if crc & 0x0001:
crc = (crc >> 1) ^ polynomial
else:
crc >>= 1
return crc
# "ABCD" 문자열에 대한 CRC 계산 예시
data = b'ABCD'
crc16_xmodem = crc16_lsb_fast(data, 0x1021, 0x0000)
crc16_modbus = crc16_msb_fast(data, 0x8005, 0xFFFF)
# 계산된 CRC 값을 16진수로 출력
print(hex(crc16_xmodem))
# 결과 : 0x3b3a
print(hex(crc16_modbus))
# 결과 : 0xf85
반응형
'코드보관소 > Python' 카테고리의 다른 글
[python] 2진수 비트를 뒤집는 방법 (0) | 2023.05.11 |
---|---|
파이스크립트 테스트 (0) | 2022.07.03 |
[pyqt] pyinstaller .ui 포일 포함시키기 (0) | 2021.07.30 |
[win32api] WM_MESSAGE CONSTANCE (0) | 2021.07.20 |
[python] hello, world! (0) | 2021.05.02 |