How to convert an Int into NSData in Swift?

前端 未结 7 1907
陌清茗
陌清茗 2021-02-03 22:37

In Objective-C I use the following code to

  1. Convert an Int variable into NSData, a packet of bytes.

    int myScore = 0;
    NS         
    
    
            
7条回答
  •  臣服心动
    2021-02-03 23:04

    In contemporary versions of Swift, I would do:

    let score = 1000
    let data = withUnsafeBytes(of: score) { Data($0) }
    
    e8 03 00 00 00 00 00 00 
    

    And convert that Data back to an Int:

    let value = data.withUnsafeBytes {
        $0.load(as: Int.self)
    }
    

    Note, when dealing with binary representations of numbers, especially when exchanging with some remote service/device, you might want to make the endianness explicit, e.g.

    let data = withUnsafeBytes(of: score.littleEndian) { Data($0) }
    
     e8 03 00 00 00 00 00 00 
    

    And convert that Data back to an Int:

    let value = data.withUnsafeBytes {
        $0.load(as: Int.self).littleEndian
    }
    

    Versus big endian format, also known as “network byte order”:

    let data = withUnsafeBytes(of: score.bigEndian) { Data($0) }
    
     00 00 00 00 00 00 03 e8
    

    And convert that Data back to an Int:

    let value = data.withUnsafeBytes {
        $0.load(as: Int.self).bigEndian
    }
    

    Needless to say, if you don’t want to worry about endianness, you could use some established standard like JSON (or even XML).


    For Swift 2 rendition, see previous revision of this answer.

提交回复
热议问题