簡體   English   中英

Swift 4將字節轉換為Int和Ntohl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM