当前位置: 首页 > 面试题库 >

在Swift中将int转换为UInt(反之亦然)

欧阳睿范
2023-03-14
问题内容

我正在寻找一种将Int的位值强制转换为UInt的方法,反之亦然。例如(为了简单起见,使用8位整数),我想实现以下目标:

let unsigned: UInt8 = toUInt8(-1)  // unsigned is 255 or 0xff
let signed:   Int8  = toInt8(0xff) // signed is -1

首先,我提出了以下解决方案:

let unsigned = unsafeBitCast(Int8(-1), UInt8.self)
let signed   = unsafeBitCast(UInt8(0xff), Int8.self)

但是Apple在“ unsafeBitCast()”文档中指出以下内容:

..注意::破坏了Swift的类型系统的保证;使用时要格外小心。几乎总是有更好的方法来做任何事情。

有谁有更好的方法?


问题答案:

你可以做:

let unsigned = UInt8(bitPattern: Int8(-1)) // -> 255
let signed   = Int8(bitPattern: UInt8(0xff)) // -> -1

存在许多类似的初始化程序:

extension Int8 {
    init(_ v: UInt8)
    init(_ v: UInt16)
    init(truncatingBitPattern: UInt16)
    init(_ v: Int16)
    init(truncatingBitPattern: Int16)
    init(_ v: UInt32)
    init(truncatingBitPattern: UInt32)
    init(_ v: Int32)
    init(truncatingBitPattern: Int32)
    init(_ v: UInt64)
    init(truncatingBitPattern: UInt64)
    init(_ v: Int64)
    init(truncatingBitPattern: Int64)
    init(_ v: UInt)
    init(truncatingBitPattern: UInt)
    init(_ v: Int)
    init(truncatingBitPattern: Int)
    init(bitPattern: UInt8)
}


 类似资料:
  • 我正在使用将整数作为输入参数的第三方服务器。但是,当查询我再次编写的值时,它似乎使用数字的最左边的位作为符号。因此,1000...0(16 位)将返回为 -32768,11000...0 将返回为 -16384,依此类推。 鉴于Java不知道uints,我正在寻找一种有效的方法将负数转换为正确的正数(第一个是2^15,第二个是2^ 15 2^24,依此类推)。

  • 问题内容: 我有此表达式返回一个: 我希望能够在此if语句中使用数字: 问题是控制台给了我这个 问题是无法与进行比较。我想投到一个。我努力了: 这些都导致 如何转换值或在if语句中使用它? 问题答案: 做两件事,一是消除当前方法的负面结果,二是应根据结果正确创建一个Int。

  • 问题内容: 什么是最有效的方式(性能)转换,并从在Golang? 例如: 我有一个解决方案,但它包含div,mod和乘法 问题答案: 我怀疑你是在追逐这样的游乐场 调整为适当的

  • 问题内容: 如果我有RGB小数,例如,我该怎么做才能将其转换为CMYK? 例如: 问题答案: 这是Javascript实现的Python端口。

  • 问题内容: 我正在尝试找出如何在Swift中将转换为。 我想出一种解决方法,但是我很想弄清楚如何在Swift中做到这一点。 问题答案: 转换为: 而另一种方式-转换为: 或者,如果您使用的是Swift 2或3:

  • 问题内容: 我想将转换成斯威夫特。像这样的基本转换不起作用,因为这些类型不是基元,这与Objective-C中的s和s 不同 但这会产生以下错误消息: “浮点数”不可转换为“整数” 知道如何将属性从转换为吗? 问题答案: 您可以转换到斯威夫特这样的: 您还可以使用@paulm的注释来实现此结果: