如何将 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 代码的逆运算。
我在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 代码的逆运算。