2017-11-09 33 views
0

I 스위프트 사에서 다음과 같은 기능이 있습니다나는 모드 버스 CALC에 대한 바이트 단위로 문자열을 변환해야

import Foundation 

func crc16(of data: Data) -> String { 
    var crc = 0xffff as UInt16 
    for byte in data { 
     crc = crc^UInt16(byte) 
     for _ in 0..<8 { 
      if crc & 0x0001 == 0x0001 { 
       crc = (crc >> 1)^0xa001 
      } else { 
       crc = crc >> 1 
      } 
     } 
    } 
    let msb = crc >> 8 
    let lsb = crc & 0x00ff 
    return String(format: "%02x%02x", lsb, msb) 
} 

을 그리고 그 코드로 CRC를 계산할 수 있습니다 물어 지금

print(crc16(of: Data(bytes: [0x11, 0x01, 0x00, 0x03, 0x00, 0x0C]))) // -> ce9f 

print(crc16("11010003000C")) // -> ce9f 

대신 :

, 어떻게 사용하는 코드를 해당 기능을 수정할 수 있습니다

편집 텍스트에 "11010003000C"문자열을 삽입하고 다른 편집 텍스트에 "ce9f"함수의 결과를 표시하는 간단한 응용 프로그램을 만들고 싶습니다.

미리 감사드립니다.

답변

0

문자열을 입력으로 사용하는 crc16의 다른 버전을 작성할 수 있습니다. 그런 다음이 문자열을 각각 2 문자의 부분 문자열로 분할하고 데이터 구조에 바이트로 추가합니다.

func crc16(_ str: String) -> String { 
    var data = Data() 
    var startIndex = str.startIndex 

    while startIndex < str.endIndex { 
     let endIndex = str.index(startIndex, offsetBy: 2) 
     let substr = str[startIndex..<endIndex] 
     data.append(UInt8(substr, radix: 16)!) 
     startIndex = endIndex 
    } 
    return crc16(of: data) 
} 
+0

먼저 답장을 보내 주셔서 감사합니다! "오류 : (1) 종료 :/usr/bin/swift-build-tool -f /swift-execution/.build/debug.yaml main 줄 16, 열 17에서 오류가 발생했습니다 : 불필요한 인수 레이블 'of :'의 호출 : return crc16 (of : 데이터) " – Bokka

+0

코드를 수정하려고했습니다 ("of of "를 (를) 제거했습니다. – Bokka