我正在处理Pebble加速度计数据,需要将负整数的无符号表示转换为正常数字(例如第一个和第二个)。使用Objective C,我通过简单的[number intValue]实现了这一点。然而,使用Swift,我找不到方法。我尝试了Int(number),但是得到了相同的值。
如果您收到了错误的类型,您始终可以执行unsafeBitcast
:
unsafeBitCast(UInt32(4294967009), Int32.self) // -287
例如,这将一个 UInt32
转换为 Int32
编辑:vacawama 展示了一种更好的解决方案,而不需要使用不安全的 unsafe
:
Int32(bitPattern: 4294967009)
Int32(bitPattern: 4294967009)
来完成,这样就不需要使用那个讨厌的unsafe
关键字了。 :-) - vacawamabitPattern
将无符号数转换为有符号数:let x = Int32(bitPattern: 4294967009)
print(x) // prints "-287"
或者如果您的值已经存储在变量中:
```let x: UInt32 = 4294967241
let y = Int32(bitPattern: x)
print(y) // prints "-55"
如果您的值存储为64位UInt
,在转换为Int32
时需要使用truncatingBitPattern
:
let x: UInt = 4294967241
let y = Int(Int32(truncatingBitPattern: x))
print(y) // prints "-55"
你是想将一个负数的无符号表示转换为有符号表示吗?如果是,这个方法应该可以:
let negativeValue = Int((incomingValue - 0xffffffff) % 0xffffffff)
%
)的优先级高于减号(-
),我觉得你需要加上一些括号。 - Kametrixom