这是我将字节数据转换为float的代码.我尝试了这个网站给出的每个答案.我得到了这个"<44fa0000>"字节数据的指数值
static func returnFloatValue(mutableData:NSMutableData)->Float
{
let qtyRange = mutableData.subdataWithRange(NSMakeRange(0, 4))
let qtyString = String(qtyRange)
let qtyTrimString = qtyString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
let qtyValue = Float(strtoul(qtyTrimString, nil, 16)/10)
return qtyValue
}
Run Code Online (Sandbox Code Playgroud)
谢谢
有很多来源解释如何在Swift 2中制作它作为基础:
var value: Int = 0
let data: NSData = ...;
data.getBytes(&value, length: sizeof(Int))
Run Code Online (Sandbox Code Playgroud)
然后我更新了Swift 3的语法/命名:
var value: Int = 0
let data: NSData = ...;
data.copyBytes(to: &value, count: MemoryLayout<Int>.size)
Run Code Online (Sandbox Code Playgroud)
然而它不起作用.编译器不喜欢它的类型value,它应该是UInt8.但我想要Int.谁知道我怎么能做到这一点?
我用于获取字节数据的代码,但我没有获取浮点值的正确字节数据
let count = data.length / sizeof(UInt32)
// create array of appropriate length:
var array = [UInt32](count: count, repeatedValue: 0)
// copy bytes into array
data.getBytes(&array, length:count * sizeof(UInt32))
print(array)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该方法将其读Data入Swift 4 .问题structwithUnsafeBytes
网络UDP数据包具有以下格式:
data: 0102 0A00 0000 0B00 0000
01 : 1 byte : majorVersion (decimal 01)
02 : 1 byte : minorVersion (decimal 02)
0A00 0000 : 4 bytes: applicationHostId (decimal 10)
0B00 0000 : 4 bytes: versionNumber (decimal 11)
Run Code Online (Sandbox Code Playgroud)
然后我有一个扩展Data,需要一个start和length几个字节来读取
extension Data {
func scanValue<T>(start: Int, length: Int) -> T {
return self.subdata(in: start..<start+length).withUnsafeBytes { $0.pointee }
}
}
Run Code Online (Sandbox Code Playgroud)
这在逐个读取值时正常工作:
// correctly read as decimal "1"
let …Run Code Online (Sandbox Code Playgroud) 我正在构建一个仅显示速度和节奏的 iOS 应用程序。我已成功连接到 BLE 设备并接收数据。我根本不知道从这里该做什么。我如何理解这些数据?
这是收到的数据
central.state is .poweredOn
<CBPeripheral: 0x2838f48c0, identifier = A7DBA197-EF45-A8E5-17FB-DF8505493179, name = DuoTrap S, state = disconnected>
Peripheral(id: 0, name: "DuoTrap S", rssi: -70)
Connected!
<CBService: 0x281cbd380, isPrimary = YES, UUID = Cycling Speed and Cadence>
<CBCharacteristic: 0x282de4420, UUID = 2A5B, properties = 0x10, value = {length = 11, bytes = 0x03030000005d1601008212}, notifying = NO>
2A5B: properties contains .notify
<CBCharacteristic: 0x282df8660, UUID = 2A5C, properties = 0x2, value = {length = 2, bytes = 0x0700}, notifying …Run Code Online (Sandbox Code Playgroud) 我有一个数据,我从服务中的一个特征收到
let value = characteristic.value
Run Code Online (Sandbox Code Playgroud)
数据类型的这个"值".
在此值中,有20个字节包含5个类型为Uint8或int 1,2,3,4,5的数字.
如何从此数据值中获取这些整数?
我有一个 Java 服务器,我在其中使用 ashort[]并将其转换为byte[](Big Endian)并将其发送到 iOS 设备。我无法将此字节数组(或DataSwift 中的)转换为int16数组 ( [Int16])。我还想知道我假设 Javashort类型的 Swift 等价物是 Swift 中的 a 是否正确Int16。
我正在尝试在钥匙串中保存日期,并且(根据我的理解)这首先需要将Date对象转换为Data对象。
这个 Stack Overflow Q/A解释了如何在 Swift 3 中做到这一点(或至少是其中的一部分),但我希望有人可以提供 Swift 5 中的 to/from 函数(因为该解决方案中至少有一种方法)已被弃用,我担心其他东西也没有经受住时间的考验)。
我有:
Float(bitPattern: UInt32(bigEndian: data.withUnsafeBytes { $0.pointee } ))
Run Code Online (Sandbox Code Playgroud)
这段代码正在将数据转换为浮点数,但我想要反转它,意思是浮点数到数据。请指导我如何转换。