如何将 java 字节转换为 swift int

How to convert the java bytes to swift int

我在iOS中使用GCDAsyncSocket实现套接字,我先接收包头使用socket.readData(toLength: 5, withTimeout: -1, tag: 0)然后在didRead委托中计算包体长度并使用socket.readData(toLength: bodySize, withTimeout: -1, tag: 0) 继续接收正文包

socket包头有5个字节 bytes[0] 是 type ,其他四个字节是 body

的大小

在 java

中,大小从 Int 转换为字节
 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

Data 中有 5 个字节时,您无需将其转换为 Array

你可以这样写:

let length = UInt32(data[1]) << 24 | UInt32(data[2]) << 16 | UInt32(data[3]) << 8 | UInt32(data[4])

还有其他一些方法,但这段代码适合您的 Java 代码的逆运算。