You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何将带前导零的十六进制字符串转为UInt16?

解决十六进制字符串转UInt16并保留格式的问题

完全可以直接将拆分后的十六进制字符串转为UInt16,关键是要指定十六进制基数来解析,同时如果需要输出0x0145这种带前导零的格式,要通过字符串格式化来实现。

核心问题分析

你之前用Int("0145")得到145,是因为默认以十进制解析字符串,把"0145"当成了十进制数。正确的做法是告诉编译器这是十六进制字符串。

具体实现代码(以Swift为例)

1. 解析十六进制字符串为UInt16

直接使用UInt16的初始化方法,指定radix: 16(表示十六进制):

// 解析"0145"
if let firstValue = UInt16("0145", radix: 16) {
    print(firstValue) // 输出十进制数值:325(对应十六进制0x0145)
}

// 解析"9f7f"
if let secondValue = UInt16("9f7f", radix: 16) {
    print(secondValue) // 输出十进制数值:40831(对应十六进制0x9F7F)
}

这里得到的UInt16值本身就是你要的0x0145和0x9f7f对应的数值——数值本身不存在前导零的概念,0x0145和0x145在数值上是等价的,只是展示形式不同。

2. 输出带0x前缀和前导零的格式

如果需要把数值展示成0x0145或0x9f7f的形式,用String(format:)来格式化:

if let firstValue = UInt16("0145", radix: 16) {
    // 大写十六进制,保留4位前导零
    print(String(format: "0x%04X", firstValue)) // 输出:0x0145
    // 小写十六进制,保留4位前导零
    print(String(format: "0x%04x", firstValue)) // 输出:0x0145
}

if let secondValue = UInt16("9f7f", radix: 16) {
    print(String(format: "0x%04X", secondValue)) // 输出:0x9F7F
    print(String(format: "0x%04x", secondValue)) // 输出:0x9f7f
}

为什么用UInt16?

4位十六进制数的范围是0x0000到0xFFFF,刚好对应UInt16的取值范围(0到65535),不会出现溢出问题,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者tp2376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:39:58