每个人,
我需要将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。
有人可以帮忙吗?谢谢:))
答案 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