Я использую GCDAsyncSocket для достижения сокета в iOS, я получаю заголовок пакета, сначала использую socket.readData(toLength: 5, withTimeout: -1, tag: 0)
, затем я вычисляю длину тела в делегате didRead
и использую socket.readData(toLength: bodySize, withTimeout: -1, tag: 0)
для продолжения получения пакета тела
Головка пакета сокета имеет 5 байтов: байты [0] — это тип, а остальные четыре байта — размер тела.
Размер конвертируется из Int в байты в java
byte[] header = new byte[5];
header[0] = type; //package type
header[1]=(byte) ((length>>24)&0xff); //package size
header[2]=(byte) ((length>>16)&0xff); //package size
header[3]=(byte) ((length>>8)&0xff); //package size
header[4]=(byte) (length&0xff); //package size
return header;
В swift я использую let bytes = [UInt8](data)
для преобразования данных в байты в socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int)
, потому что массив байтов в swift имеет значение UInt8 и отличается от java-байтов (-127 ~ 127). Поэтому я хочу знать, как преобразовать байты размера в Int