본문 바로가기
코드보관소/Python

[python] CRC-16 msb fast , lsb fast 생성 함수

by 위치결정 2023. 5. 11.
반응형
# 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진수 비트를 뒤집는 방법  (2) 2023.05.11
파이스크립트 테스트  (2) 2022.07.03
[pyqt] pyinstaller .ui 포일 포함시키기  (566) 2021.07.30
[win32api] WM_MESSAGE CONSTANCE  (2) 2021.07.20
[python] hello, world!  (0) 2021.05.02

댓글