在 Swift 中将有符号转换为无符号

Posted

技术标签:

【中文标题】在 Swift 中将有符号转换为无符号【英文标题】:Converting signed to unsigned in Swift 【发布时间】:2014-10-29 06:48:42 【问题描述】:

在 C 中,我可以用数字做一个技巧:

uint8_t value = 0
int delta = -1
uint8_t result = value + delta  /* result will be 0xFF */

有没有办法在 Swift 中做同样的事情?请注意,相同的方法不起作用:

let value: UInt8 = 0
let delta: Int = -1
var result: UInt8 = value + delta  // Error, even typecasting in different ways... 

有没有办法在 Swift 中获取 C 的减法行为?

谢谢!

【问题讨论】:

【参考方案1】:

所有有符号和无符号整数类型都有一个bitPattern: 构造函数, 它从一个有符号(或反之亦然)创建一个无符号数,具有相同的 内存表示:

let delta: Int8 = -1
let result: UInt8 = UInt8(bitPattern: delta) // 0xFF = 255

【讨论】:

只需要更正一次,我看到:需要'UInt8(bitPattern: Int8(delta))' 而不是简单的'UInt8(bitPattern: delta)'(或者delta需要是Int8)。 【参考方案2】:

(我认为您的示例有点偏离。0 - -1 是 1。不过,我相信这个答案就是您的想法)。

您想使用 &- 运算符选择加入溢出:

let value: UInt8 = 0
let delta: UInt8 = 1
let result: UInt8 = value &- delta

您可以使用其他 & 运算符(如 &+&* 等)执行类似的操作。甚至还有一个处理除以零的 &/

【讨论】:

哦!抱歉...代码错误(输入速度太快...)。现已更正。 使用更正的示例代码,其他答案效果更好,但无论如何这是有用的信息。谢谢!

以上是关于在 Swift 中将有符号转换为无符号的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中将 HEX 转换为无符号 INT16 [重复]

如何将以“\ 0”开头的char *转换为无符号整数? [关闭]

在 C 中从浮点数转换为无符号字符

将字符串转换为无符号字符 []

将 4 个字节转换为无符号 32 位整数并将其存储在 long

将 VARIANT 转换为无符号字符数组