我想为所有整数类型创建一个Integer-to-Hex函数.
对于1字节的Int8,它返回两个字母,例如0A
对于2字节的Int16,它返回四个字母,例如0A0B
对于8字节的Int64,它返回16个字母,例如0102030405060708
func hex(v: Int) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(Int)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
func hex(v: Int64) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(Int64)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
func hex(v: Int32) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(Int32)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
func hex(v: Int16) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(Int16)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
func hex(v: Int8) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(Int8)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常.
然后我尝试创建这样的通用版本:
func hex<T: IntegerType>(v: T) -> String {
var s = ""
var i = v
for _ in 0..<sizeof(T)*2 {
s = String(format: "%x", i & 0xF) + s
i = i >> 4
}
return s
}
Run Code Online (Sandbox Code Playgroud)
编译此代码时,我收到错误:T不能转换为Int
实现这项任务的正确方法是什么?
从您的问题中不清楚为什么您不使用已经为您执行此操作的内置初始化程序:
let i = // some kind of integer
var s = String(i, radix:16)
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢 的结果格式s,那么将其大写并用额外的字符填充它肯定比完成您在这里所做的所有工作要容易得多。
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |