I want to create an Integer-to-Hex function for all integer types.
For 1-byte Int8, it returns two letters, eg 0A
For 2-byte Int16, it returns four letters, eg 0A0B
for 8-byte Int64, it returns 16 letters, eg, 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
}
The above code works fine.
I then tried to create a generic version like this:
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
}
When compiling this code, I got the error: T is not convertible to Int
What is the correct way to achieve this task?
String(radix:)? Does the result that it gives seem so wrong? Added an answer suggesting this. Unfortunately your question does not include test data and desired results so it is difficult to guess precisely what you're after. - matt