Sto provando a impostare l'endianness intero usando htonl()
in Swift ma il compilatore non sta trovando il metodo htonl()
.Come si imposta il carattere intero con htonl in Swift?
ho usato questo come il mio riferimento: Append NSInteger to NSMutableData
Ecco il mio codice:
import Foundation
import CFNetwork
import CoreFoundation
var data = NSMutableData()
var number : UInt32 = 12
var convertedNumber : UInt32 = htonl(number)
data.appendBytes(&convertedNumber, length: 4)
Ho appena stato in esecuzione questo in un parco giochi. L'errore è:
Use of unresolved identifier 'htonl'
Impressionante, grazie! Sembra che funzionerà. Ho finito per implementare htonl() in un header bridging/native-c ma passerò a questo. – Michael
Giusto. htonl/htons etc è una macro e quindi non viene importata in Swift (le funzioni di varargs C come ioctl/fcntl sono un'altra cosa comune mancante). Se conosci l'endianess è facile reimplementare: func ntohs (valore: CUnsignedShort) -> CUnsignedShort { // hm, htons non è una funzione in OSX e la macro non è mappata return (valore << 8) + (valore >> 8); let htons = ntohs // stessa cosa, scambia byte :-) – hnh
In realtà 'CFSwapInt32HostToBig' e gli amici sono ora disponibili in Swift che viene fornito con Xcode 6.1.1 :) –