Я видел много вопросов, преобразующих hex в int, но это все беззнаковое -> unsigned разновидность. Как я могу конвертировать подписанный hex в Int?Подпись Hex to Signed Int Swift
например.
somefunc('0xfffff830')
= -2000
Я видел много вопросов, преобразующих hex в int, но это все беззнаковое -> unsigned разновидность. Как я могу конвертировать подписанный hex в Int?Подпись Hex to Signed Int Swift
например.
somefunc('0xfffff830')
= -2000
Ваш вопрос подразумевает, что вы имеете дело с 32-битными целыми числами (в противном случае 0xfffff830
не могут рассматриваться как отрицательные), так это будет работать:
let num = "0xfffff830"
let x = Int32(truncatingBitPattern: strtoul(num, nil, 16))
println(x) // -2000
strtoul()
преобразует шестнадцатеричную строку в целое число без знака UInt
и Int32(truncatingBitPattern:)
создает 32-битовое целое (подписанное) из младших 32 бит данного аргумента.
Вы можете использовать преобразование без знака, а затем преобразовать знак без знака в подпись.
let num = "0xfffff830"
var result: UInt32 = 0
let converter = NSScanner(string: num)
converter.scanHexInt(&result)
print(unsafeBitCast(result, Int32.self)) // prints -2000
Спасибо! это обрабатывает как положительные, так и отрицательные значения и является другим решением. – John
Также хорошее решение, я бы предпочел только 'Int32 (битPattern: result)' over 'unsafeBitCast (...)'. –
Это ручка как подписанная, так и неподписанная и хороша и коротка, спасибо! – John