2017-10-31 13 views
0

私はBLEデバイスを使用しています。デバイスは特定のUUIDで値を送信しています。
データをIntまたはStringに変換して表示するコードです。
swift3のInt/Stringへのデータ

... 
else if characteristic.uuid == CBUUID(string: UUID_CHANGEIN_BATTERY_LEVEL) { 
//   let battery = UInt32(bigEndian: ((characteristic.value?.withUnsafeBytes { $0.pointee }) ?? 0)) 
      let array : [UInt8] = [0, 0, 0] 
      var data = Data(bytes: array) 
      if characteristic.value != nil { 
       data.append(characteristic.value!) 
      } 
      let battery = UInt32(bigEndian: ((data.withUnsafeBytes { $0.pointee }) ?? 0)) 
      print("battery level changed\nNew level is \(getInt(fromData: characteristic.value!, start: 0))!") 
//   lblBattery.text = (String(data: characteristic.value!, encoding: String.Encoding.utf8) ?? "0") + "%" 
      lblBattery.text = "\(getInt(fromData: characteristic.value!, start: 0))%" 

     } 
... 
func getInt(fromData data: Data, start: Int) -> Int32 { 
     let intBits = data.withUnsafeBytes({(bytePointer: UnsafePointer<UInt8>) -> Int32 in 
      bytePointer.advanced(by: start).withMemoryRebound(to: Int32.self, capacity: 4) { pointer in 
       return pointer.pointee 
      } 
     }) 
     return Int32(bigEndian: intBits) 
//  return Int32(littleEndian: intBits) 
    } 

私は値として0x2b01を表示し、それはまた、バッテリー%として43を表示さBLEスキャナiOSアプリでチェックしました。
私は上記のように3-4種類のコードを書いています。 しかし、それらのどれもが価値として私に43を与えていません。

私が何か間違ったやり方を見つけたり、私の要件を満たすために紛失している場所を見つけるのを助けてください。

+0

確認し、CBCharateristic値は0x2b01とバッテリー= 43%であり、Uがありますか? –

+0

はい、私は他のアプリ、すなわちBLEScannerをチェックしており、デバイス統合マニュアルでもデータが16進数形式で提供されています –

答えて

0

SWIFT 3

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { 

    let value = [UInt8](characteristic.value!) 

    print("Battery ", value[0], "%") 
} 
+0

訂正私は同じ昨日同じことをして答えました。しかし、あなたはすでに同じものを与えました。 –

関連する問題