【问题标题】:How to convert the java bytes to swift int如何将java字节转换为swift int
【发布时间】:2020-04-29 06:50:36
【问题描述】:

我在iOS中使用GCDAsyncSocket实现socket,接收包头先使用socket.readData(toLength: 5, withTimeout: -1, tag: 0),然后在didReaddelegate中计算body长度,使用socket.readData(toLength: bodySize, withTimeout: -1, tag: 0)继续接收body包

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 中的 bytes 数组是 UInt8 并且与 java bytes( -127 ~ 127 ) 不同 所以我想知道如何将大小字节转换为 Int

【问题讨论】:

    标签: swift gcdasyncsocket


    【解决方案1】:

    如果Data 中有 5 个字节,则无需将其转换为 Array

    你可以这样写:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 2019-11-19
      • 2011-02-19
      • 1970-01-01
      • 2013-01-13
      • 2016-03-04
      • 2016-02-20
      相关资源
      最近更新 更多