2017-04-30 9 views
0

NMEA文でチェックサムを計算しようとしていますが、正しい値を取得できません。ここに私のテストコードがあります。スイフト3 xorチェックサム計算

import UIKit 

//$GPGLL,5300.97914,N,00259.98174,E,125926,A*28 

let str = "GPGLL,5300.97914,N,00259.98174,E,125926,A" 


var xor: UInt8 = 0 
for i in 0..<str.characters.count { 
    xor = xor^Array(str.utf8)[i] 
} 

print(xor) 

これは、40のチェックサムを返します。予想したものではありません。

私は間違っていますか?

答えて

1

チェックサムは、(区切り文字そのものは含まれません)$と *の間のすべてのバイトの単なるXORシンプルで、かつ 進数で書かれました。

let str = "$GPGLL,5300.97914,N,00259.98174,E,125926,A*" 

var xor: UInt8 = 0 
for i in 1..<(str.characters.count - 1){ 
    xor = xor^Array(str.utf8)[i] 
} 
extension UnsignedInteger { 
    var hex: String { 
     var str = String(self, radix: 16, uppercase: true) 
     while str.characters.count < 2 * MemoryLayout<Self>.size { 
      str.insert("0", at: str.startIndex) 
     } 
     return str 
    } 
} 

let strWithCheckSum = str + xor.hex 
print(strWithCheckSum) // GPGLL,5300.97914,N,00259.98174,E,125926,A*28 
+0

rrh!だから私は16進数に変換するのを忘れてしまった。ありがとう! – XerXeX

関連する問題