引数のビット長に応じた0詰を行う16進変換

import Foundation

func toHex<T:UnsignedInteger>(_ val:T)->String {
let hexLen=MemoryLayout<T>.size * 2
return String(format:"%0\(hexLen)x", val as! CVarArg)
}

print( toHex(UInt16(253)) )

コードから意図が読み取れる気がしない、、、
もう少しわかりやすい書き方ないかなぁ?