[英]Swift 4 convert bytes to Int and ntohl
大家好,所以我一直在嘗試將這一Objective-C代碼轉換為快速代碼,但始終會遇到麻煩。 這是Objective-C代碼:
int msgLength = *((int *) _inputBuffer.bytes);
msgLength = ntohl(msgLength);
這就是我設法得到的:
var msgLength = (inputBuffer.bytes).load(as: Int.self)
msgLength = Int(NSSwapBigLongToHost(UInt(msgLength)))
但這無法正常工作,並崩潰表示沒有足夠的位數。 非常感謝您的幫助!
C int
類型是32位整數(在當前所有Apple平台上),而Swift Int
在64位平台上是64位整數。
因此,在Swift中,您必須將UInt32
用於32位整數:
var msgLength = (inputBuffer.bytes).load(as: UInt32.self)
msgLength = UInt32(bigEndian: msgLength)
或者,如果您從NSData
切換到Data
:
let msgLength = UInt32(bigEndian:inputBuffer.withUnsafeBytes { $0.pointee })
(即使在C代碼中, uint32_t
也比int
更適合於強調4個字節的讀取。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.