在Swift中将Int转换为UInt32

我做了一个Tcp客户端,因此使用CFStreamCreatePairWithSocketToHost期待UInt32作为第二个参数。

这里是我想要做的一个例子。

 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 } 

我一直在寻找一个解决scheme,现在我似乎无法find一个!

你可以轻松做到这一点:

 var x = UInt32(yourInt) 

Nikos M.的答案可能会溢出,因为Swift Int现在是64位,并且当默认的UInt32初始化器溢出时,Swift会崩溃。 如果您想避免溢出,请使用truncatingBitPattern初始值设定项 。

如果您确定您的数据不会溢出,那么您应该使用默认的初始化程序,因为溢出表示应用程序的无效数据。 如果你确定你的数据会溢出,但你不关心截断(比如如果你正在构build哈希值或什么的),那么你可能要截断。

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

这很简单:

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

在你的情况,只是通过

 UInt32(Port) 

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

注意 :在swift中,使用较小的驼峰命名variables是一种很好的做法,所以第一个字母是小写的

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

 var x = Int32(yourInt)