Swift 3:负Int到十六进制

时间:2016-11-25 14:19:24

标签: swift hex

每个人,

我需要将Int转换为其十六进制值。 示例:-40 => D8

我有一个正(或无符号)Int的工作方法,但它没有按预期的方式使用否定。这是我的代码。

class func encodeHex(data:[Int]) -> String {
    let hexadecimal = data.reduce("") { (string , element) in
        var append = String(element, radix:16 , uppercase : false)
        if append.characters.count == 1 {
            append = "0" + append
        }
       return  string + append
    }
    return hexadecimal
}

如果我通过-40,我会得到-28。

有人可以帮忙吗?谢谢:))

2 个答案:

答案 0 :(得分:3)

D8-40的二进制表示的最后一个字节。其余三个字节都是FF s。

如果要查找仅代表最后一个字节的字符串,可以先将数字转换为无符号8位整数,然后将其转换为十六进制,如下所示:

let x = UInt8(bitPattern:Int8(data))
let res = String(format:"%02X", x)

答案 1 :(得分:3)

我假设你现有的代码中所有整数都在范围内 -128 ...... 127.然后这会奏效:

func encodeHex(data:[Int]) -> String {
    return data.map { String(format: "%02hhX", $0) }.joined()
}

"%02hhX"格式打印出最低有效字节 给定整数16的基数为2位数。

示例:

print(encodeHex(data: [40, -40, 127, -128]))
// 28D87F80