2014-12-07 2 views
-3
내가 자바이 파이썬의 코드를 번역하려고

로 변환하려고합니다,하지만 난 문자열 이해할 수 없다 :파이썬의 코드를 이해할 수 없습니다. 자바

crc^ord (data[idx]) << 8 

return crc & 0xffff 

Actualy을, 나는 만 부분을 이해할 수 없다 < < 8& 0xffff가

전체 기능 :

def calculateCRC (data): 
l = len (data) 
crc = 0 
idx = 0 
l = l - 1 
while l >= 0 : 
    crc = crc^ord (data[idx]) << 8 
    idx = idx + 1 
    i = 8 
    while i != 0: 
    if crc & 0x8000: 
     crc = crc << 1^0x1021 
    else: 
     crc = crc << 1 
    i = i - 1 
l = l - 1 

return crc & 0xffff 

나는 SO가 nott 무료 코드 번역 서비스임을 알고 있지만 파이썬에 관해 명확한 질문이 있습니다. 그럼. 너 나 좀 도와 줄 수있어?

+0

마스의 샤이 크가 번역을 가지고 있지만, 경우에 당신이 비트에-A-시간 CRC 계산 성능 문제로 실행 단지에 대한 어떤 맛에 대한 바이트에서-A 형 알고리즘이있다 CRC의. 이 방법은 Aram Perez가 1983 년 IEEE Micro의 기사 "Byte-wise CRC Calculations"에 기인 한 것으로 보인다. PDF가 여기 저기에 있습니다. 분명히 http://bitsavers.informatik.uni-stuttgart.de/pdf/fairchild/_appNotes/Byte-wise_CRC_Jun83.pdf –

+0

에서 그 중 하나를 발견했습니다. 분명히이 방법은 그 6 월 '83 년 기사보다 약간 뒤로 돌아갑니다. 분명히 John R. Hill은 1979 년에 테이블 기반 접근 방식을 발표했습니다. 온라인에서 무료 PDF를 찾을 수는 없습니다. –

답변

0

감사합니다. 도움에 감사드립니다! 전체 대답은 :

public int getCRC(String data) 
{ 
    int l = data.length(); 
    int crc = 0; 
    int idx = 0; 
    l = l - 1; 
    while (l >= 0) 
    { 
     crc = crc^data.charAt(idx) << 8; 
     idx = idx + 1; 
     int i = 8; 
     while (i != 0) 
     { 
      if ((crc & 0x8000) != 0) 
      { 
       crc = crc << 1^0x1021; 
      } 
      else 
      { 
       crc = crc << 1; 
      } 
      i = i - 1; 
     } 
     l = l - 1; 
    } 
return crc & 0xffff; 
} 
3

ord 기능에 대한 자세한 내용은 this을 참조하십시오. crc^ord (data[idx]) << 8의 Java 상당은

crc^data.charAt(idx) << 8; 
관련 문제