如何在不跳过第一个零的 swift 的情况下将字符串转换为 int?
How to convert string to int without skip first zeros's swift?
注意-我不是要在这里转换 hexttoInt ..
我想要实现的是我有 9 位序列号 305419896(十进制)的十六进制格式是 12345678..我只是想将 0x1234 作为一个值,将 0x5678 作为另一个值..
我的十进制数是 021340031,十六进制数是 01459F7F 并分成两个字符串,如 "0145"
和 "9f7f"
..我需要这个字符串值,格式如 0x0145 , 0x9f7f..
为了做到这一点,我首先尝试将 Str 转换为 Int。
let firstValue = Int("0145")
然后我只得到 145
..
是否有任何方法可以将 String 直接转换为 UInt16 或任何变通方法以获得预期值?
如果我没理解错的话,您想将十六进制分成两半并显示最低有效的两个字节和最高有效的两个字节吗?
为此,请使用位掩码和位移运算符:
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 位的十六进制数字,必要时带有前导零
UInt16
不是基数 16 Int
,它是具有 16 位存储空间的 Int
。
你想要的是 Int
鲜为人知的初始化器…
let firstValue = Int("0145" radix: 16)
这将为您提供字符串的十六进制值。但是它仍然会删除任何前导零,因为它们没有价值。没有办法避免这种情况。
注意:您可以为 radix
使用您想要的大多数任何值,如果您需要在某些时候转换回来,您可以用相同的方式从整数中获取字符串。
注意-我不是要在这里转换 hexttoInt .. 我想要实现的是我有 9 位序列号 305419896(十进制)的十六进制格式是 12345678..我只是想将 0x1234 作为一个值,将 0x5678 作为另一个值..
我的十进制数是 021340031,十六进制数是 01459F7F 并分成两个字符串,如 "0145"
和 "9f7f"
..我需要这个字符串值,格式如 0x0145 , 0x9f7f..
为了做到这一点,我首先尝试将 Str 转换为 Int。
let firstValue = Int("0145")
然后我只得到 145
..
是否有任何方法可以将 String 直接转换为 UInt16 或任何变通方法以获得预期值?
如果我没理解错的话,您想将十六进制分成两半并显示最低有效的两个字节和最高有效的两个字节吗?
为此,请使用位掩码和位移运算符:
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 位的十六进制数字,必要时带有前导零
UInt16
不是基数 16 Int
,它是具有 16 位存储空间的 Int
。
你想要的是 Int
鲜为人知的初始化器…
let firstValue = Int("0145" radix: 16)
这将为您提供字符串的十六进制值。但是它仍然会删除任何前导零,因为它们没有价值。没有办法避免这种情况。
注意:您可以为 radix
使用您想要的大多数任何值,如果您需要在某些时候转换回来,您可以用相同的方式从整数中获取字符串。