如何将数据转换为小端格式?

时间:2017-06-12 09:46:30

标签: ios swift swift3

var val = 1240;

转换成小尾数甲酸酯swift 3

例如:1500 (0x5DC)0xDC050000

4 个答案:

答案 0 :(得分:4)

xml

确保您实际使用的是let value = UInt16(bigEndian: 1500) print(String(format:"%04X", value.bigEndian)) //05DC print(String(format:"%04X", value.littleEndian)) //DC05 初始化程序。

使用32位整数:

bigEndian

答案 1 :(得分:1)

如果你想以小端顺序将1500作为字节数组:

var value = UInt32(littleEndian: 1500)

let array = withUnsafeBytes(of: &value) { Array($0) }

如果您想将其作为Data

let data = Data(array)

或者,如果你真的想要它作为十六进制字符串:

let string = array.map { String(format: "%02x", $0) }.joined()

答案 2 :(得分:0)

您可以执行类似

的操作
//: Playground - noun: a place where people can play

import UIKit

extension String {
    func hexadecimal() -> Data? {
        var data = Data(capacity: count / 2)
        let regex = try! NSRegularExpression(pattern: "[0-9a-f]{1,2}", options: .caseInsensitive)
        regex.enumerateMatches(in: self, range: NSRange(location: 0, length: utf16.count)) { match, _, _ in
            let byteString = (self as NSString).substring(with: match!.range)
            var num = UInt8(byteString, radix: 16)!
            data.append(&num, count: 1)
        }
        guard !data.isEmpty else { return nil }
        return data
    }
}


func convertInputValue<T: FixedWidthInteger>(_ inputValue: Data) -> T where T: CVarArg {
    let stride = MemoryLayout<T>.stride
    assert(inputValue.count % (stride / 2) == 0, "invalid pack size")

    let fwInt = T.init(littleEndian: inputValue.withUnsafeBytes { $0.pointee })
    let valuefwInt = String(format: "%0\(stride)x", fwInt).capitalized
    print(valuefwInt)
    return fwInt
}

var inputString = "479F"
var inputValue: Data! = inputString.hexadecimal()
let val: UInt16 = convertInputValue(inputValue) //9F47

inputString = "479F8253"
inputValue = inputString.hexadecimal()
let val2: UInt32 = convertInputValue(inputValue) //53829F47

答案 3 :(得分:-1)

                let timeDevide = self.setmiliSecond/100
                var newTime = UInt32(littleEndian: timeDevide)
                let arrayTime = withUnsafeBytes(of: &newTime) 
                 {Array($0)}
                let timeDelayValue = [0x0B] + arrayTime