let len: UInt32 = UInt32(data.count) //包体已经写入data中
var convertedNumber = len.bigEndian
let lendata = Data(bytes: &convertedNumber, count: 4)
上面代码用来获取包长,并写入一个新的Data中以便在socket中发送,要注意的是,len必须手动指定为UInt32,否则在64位机器上,len是8字节大小的,按照上面代码跑完,lendata是全零,因为只取了convertedNumber的低4字节 比如len=29,如果是64位机器,16进制显示为000000000000001d,转成bigendian就是1d00000000000000,然后执行let lendata = Data(bytes: &convertedNumber, count: 4),就只取了低四字节,为全0 一般网络通信,包长是用4字节整数来表示,那么,此处我们将len显式的定义为UInt32就行,64位机器上Int长度就是64(8字节),不是32(4字节) 被这个坑搞了很久,记录一下!!!!