在Swift中将Int转换为UInt32

时间:2014-08-30 07:13:55

标签: swift type-conversion

我正在创建一个Tcp客户端,因此使用期望用于第二个参数的UInt32的CFStreamCreatePairWithSocketToHost

以下是我尝试做的一个示例。

func initNetwork(IP: String, Port: Int) {
    // relevant stuff

    //Convert Port:Int to UInt32 to make this shit work!

    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, IP as NSString , Port , &readStream, &writeStream)

    // Irelevant stuff
}

我一直在寻找解决方案已有一段时间了,我似乎无法找到一个!

4 个答案:

答案 0 :(得分:88)

您可以轻松完成:

var x = UInt32(yourInt)

答案 1 :(得分:17)

Nikos M.'s answer可能会溢出,因为Swift Int现在是64位,当默认的UInt32初始化程序溢出时Swift会崩溃。如果您想避免溢出,请使用the truncatingBitPattern initializer

如果您确定数据不会溢出,则应使用默认初始值设定项,因为溢出表示应用程序的无效数据。如果您确定您的数据会溢出,但您不关心截断(例如,如果您正在构建哈希值或其他内容),那么您可能希望截断。

let myInt: Int = 576460752303423504
let myUInt32 = UInt32(truncatingBitPattern: myInt)

答案 2 :(得分:6)

这很简单:

let int: Int = 40
let uint = UInt32(i)

在你的情况下,只需传递

UInt32(Port)

对于端口不是问题,但在其他情况下一定要注意溢出

旁注:在swift中,使用较低的驼峰案例命名变量是个好习惯,所以第一个字母是小写的

答案 3 :(得分:6)

更容易:(想知道为什么他们使用unsigned func)

var x = Int32(yourInt)