Конвертировать C # в swift: LRC при выполнении примитивной последовательной связи - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужен эквивалентный код swift 4.2 для моего существующего кода C #. У меня есть приложение на C #, которое связывается с устройством для проверки карт. Я всегда добавляю БАЙТ после каждой инструкции для LRC. Я включаю мой код C #. (обратите внимание, что он имеет операцию XOR)

Вот пример инструкции для сброса верикона (в шестнадцатеричном формате)

0237320306, что переводится как STX-3732-ETX-LRC

для вычисления LRC. , вы отправляете все между STX и LRC -> 373203 Ответ, конечно, 06

// здесь работает код C #

private string GetChecksum(string s)
  {
    int checksum = 0;
    foreach (char c in GetStringFromHex(s))
      {
         checksum ^= Convert.ToByte(c);
      }
      return checksum.ToString("X2");
 } 
private string GetStringFromHex(string s)
 {
   string result = "";
   string s2 = s.Replace(" ", "");
   for (int i = 0; i < s2.Length; i += 2)
     {
       result += Convert.ToChar(int.Parse(s2.Substring(i, 2),   System.Globalization.NumberStyles.HexNumber));
     }
     return result;
}

/// Я нашел некоторый код для цели C, но я не знаю, работает ли он, и я действительно новичок в мире яблок, поэтому я хочу придерживаться SWIFT

Рассчитать LRC в Задаче c

, пожалуйста, помогите мне написать этот код в Swift 4.2

1 Ответ

0 голосов
/ 18 апреля 2019

это похоже на работу.хотя нужно провести тщательное тестирование ..

var str = computeLRC(hexString:"373203")
print(str)

// возвращает 06

'' '

func computeLRC (hexString: String ) -> String {
    var checksum : UInt16 = 0
    var my = ""
    for i in stride(from: 0, to: hexString.count, by: 2) {

        let indexStartOfText = hexString.index( hexString.startIndex, offsetBy: i)
        let indexEndOfText = hexString.index( indexStartOfText, offsetBy: 2)
        let substring3 = hexString[indexStartOfText..<indexEndOfText]

        let intResult =  Int(String(substring3) , radix: 16)
        guard let myUnicodeScalar = UnicodeScalar(intResult!) else {
            return ""
        }
        // convert UnicodeScalar to Character
        let myCharacter = Character(myUnicodeScalar)

        my += String(myCharacter)
    }

    for myChar in my {
        var byte: UInt16 = Array(String(myChar).utf16)[0]
        checksum ^= byte
    }

    return String(format:"%02X", checksum)

}

' ''

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...