0

注意-我不想在这里转换 hexttoInt .. 我想要实现的是我有 9 位十六进制格式的序列号 305419896(十进制)是 12345678 .. 我只是想将 0x1234 作为一个值,将 0x5678 作为其他值价值..

我的十进制数是 021340031,十六进制数是 01459F7F 并分成两个字符串,例如"0145""9f7f".. 我需要格式为 0x0145、0x9f7f 的字符串值。

为了做到这一点,我首先尝试将 Str 转换为 Int。

 let firstValue = Int("0145") 

那么我得到的145只是..

有什么方法可以直接将 String 转换为 UInt16 或任何解决方法来获得预期值?

4

2 回答 2

2

如果我理解正确,您想将十六进制分成两半并显示最低有效两个字节和最高有效两个字节?

为此,请使用位掩码和位移运算符:

let a = 0x00045678

let first = (a >> 16) & 0x0000FFFF
let second = a & 0x0000FFFF

let firstString = String(format:"0x%04X", first)
let secondString = String(format:"0x%04X", second)

输出:

0x0004
0x5678

格式0x%04X将打印至少 4 位的十六进制数,必要时使用前导零

于 2018-05-09T13:19:58.440 回答
0

UInt16不是以 16 为基数Int,而是Int具有 16 位存储空间。

你想要Int的是鲜为人知的初始化器……</p>

let firstValue = Int("0145" radix: 16)

这将为您提供字符串的十六进制值。但是它仍然会删除任何前导零,因为它们没有价值。没有办法避免这种情况。

注意:您可以使用几乎任何radix您想要的值,并且如果您需要在某个时候转换回来,您可以以相同的方式从整数中获取字符串。

于 2018-05-09T13:32:56.677 回答