swift 与BLE交互的数据--常用的处理方式

92 阅读1分钟

与ble数据交互时常常需要数据转换,留下笔记做记录。

1、十六进制转成字符串输出显示

let k :UInt16 = 2 << 8 | 3
let convert = String(k,radix:16);

2、蓝牙返回数据两个字节表示一个数字

var datas = [UInt8]()
let a = UInt16(datas[0]) << 8 & 0xff00
let b = UInt16(datas[1]) & 0x00ff
let k :UInt16 = a | b

3、大端转小端

static func dataTransfromsBigOrSmall(_ data:Data) ->Data? {
        let a_str = data.hexString()
        var ary = [String]()
        **var** index = 0

        **for** _ **in** 0..<data.count {
            **let** index1 = String.Index(utf16Offset: index, in: a_str)

            **let** index2 = String.Index(utf16Offset: index + 2, in: a_str)

            **let** range = index1..<index2

            **let** str = String(a_str[range])

            ary.append(str)

            index += 2

        }

        

        **var** n_str = String()

        **for** i **in** ary.reversed().enumerated() {

            n_str += "\(i.element)"

        }

        **let** s_data = n_str.hexData()

        **return** s_data

        

    }

4、Data转16进制字符串

    func hexString() -> String {
        return map { String(format: "%02x", $0) }.joined(separator: "").uppercased()
    }

5、16进制字符串转Data

**func** hexData() -> Data? {

        **var** data = Data(capacity: count / 2)

        **let** regex = **try**! NSRegularExpression(pattern: "[0-9a-f]{1,2}", options: .caseInsensitive)

        regex.enumerateMatches(in: **self**, range: NSMakeRange(0, utf16.count)) { match, flags, stop **in**

            **let** byteString = (**self** **as** NSString).substring(with: match!.range)

            **var** num = UInt8(byteString, radix: 16)!

            data.append(&num, count: 1)

        }

        **guard** data.count > 0 **else** { **return** **nil** }

        **return** data

    }

6、十六进制数转十进制

**static** **func** hexadecimalToDecimal(num:String) -> Int {
             **let** str = num.uppercased()
             **var** sum = 0
             **for** i **in** str.utf8 {
                 sum = sum * 16 + Int(i) - 48 // 0-9 从48开始
                 **if** i >= 65 {// A-Z 从65开始,但有初始值10,所以应该是减去55
                     sum -= 7
                 }
             }
             **return** sum
      }