【发布时间】:2018-03-28 18:07:31
【问题描述】:
我有如下数据:
let data = Data(bytes: [206, 66, 49, 62])
然后我使用这个扩展(来自How to convert Data to hex string in swift)转换为十六进制字符串:
extension Data {
struct HexEncodingOptions: OptionSet {
let rawValue: Int
static let upperCase = HexEncodingOptions(rawValue: 1 << 0)
}
func hexEncodedString(options: HexEncodingOptions = []) -> String {
let hexDigits = Array((options.contains(.upperCase) ? "0123456789ABCDEF" : "0123456789abcdef").utf16)
var chars: [unichar] = []
chars.reserveCapacity(2 * count)
for byte in self {
chars.append(hexDigits[Int(byte / 16)])
chars.append(hexDigits[Int(byte % 16)])
}
return String(utf16CodeUnits: chars, count: chars.count)
}
}
然后它给出“ce42313e”作为十六进制字符串。现在我正在尝试将其转换为有符号整数(32 位)二进制补码.. 我尝试了几种方法,但没有完美找到任何东西。
当我在此波纹管链接中以十六进制十进制给出“ce42313e”时,值为 -834522818
http://www.binaryconvert.com/convert_signed_int.html
下面是我尝试将“ce42313e”转换为 int 的方法之一,它给了我 3460444478 ..而不是 -834522818 。
let str = value
let number = Int(str, radix: 16)
请帮助获取该值。
【问题讨论】:
-
你的代码看起来很眼熟stackoverflow.com/a/40089462/1187415 :)
-
是的马丁,当我搜索它时,我得到了它,然后尝试了它..