将UInt16拆分为2个UInt8字节并获取两者的六进制字符串。迅速

时间:2018-03-26 16:00:25

标签: swift swift-playground

我需要将16383转换为7F7F,但我只能将其转换为3fff或77377。

我可以将8192转换为十六进制字符串4000,这基本上是相同的。

如果我使用build job它以第三个数字的3fff十六进制停止,第二个数字停止为2000十六进制。这是我的代码

let firstHexa = String(format:"%02X", a)

请帮助女士们和先生们!感谢。

1 个答案:

答案 0 :(得分:1)

从您的测试用例来看,您的值似乎是每字节7位。

您希望8192转换为4000。 您希望16383转换为7F7F

请注意:

(0x7f << 7) + 0x7f == 16383

鉴于:

let a = UInt8((int16 >> 7) & 0x7f)
let b = UInt8(int16 & 0x7f)
let result = String(format: "%02X%02X", a , b)

这给出了:

"4000"的{​​p> 8128 "7F7F"

16383

要扭转这个过程:

let str = "7F7F"
let value = Int(str, radix: 16)!
let result = ((value >> 8) & 0x7f) << 7 + (value & 0x7f)

print(result)  // 16383