- 詰めswift [無断転載禁止]©2ch.net
14 :デフォルトの名無しさん[]:2016/10/21(金) 00:07:12.34 ID:l5tk1soN - >>12
%xは32ビットの変換指定子なのでこのままだと64ビットの時上手く動かないよ %llxを使おう←とりあえず動くと思う 厳密にやるなら%hhx、%hx、%lx、%llxを使い分けなきゃいけない import Foundation func toHex<T:UnsignedInteger>(_ val:T)->String { let byteLen=MemoryLayout<T>.size let fmtStr = [1:
|
- 詰めswift [無断転載禁止]©2ch.net
15 :デフォルトの名無しさん[]:2016/10/21(金) 00:09:13.94 ID:l5tk1soN - なんか上手くかけなかった
テスト let fmtStr = [1:"%02hhx",2:"%04hx",4:"%08lx",8:"%016llx"] テストここまで
|
- 詰めswift [無断転載禁止]©2ch.net
16 :デフォルトの名無しさん[]:2016/10/21(金) 00:10:44.13 ID:l5tk1soN - 再投稿
import Foundation func toHex<T:UnsignedInteger>(_ val:T)->String { let byteLen=MemoryLayout<T>.size let fmtStr = [1:"%02hhx",2:"%04hx",4:"%08lx",8:"%016llx"] return String(format:fmtStr[byteLen]!, val as! CVarArg) } print( toHex(UInt8(0x0f)) ) print( toHex(UInt16(0x01ff)) ) print( toHex(UInt32(0x010000ff)) ) print( toHex(UInt64(0x01000000000000ff)) )
|
- 詰めswift [無断転載禁止]©2ch.net
17 :デフォルトの名無しさん[]:2016/10/21(金) 00:16:57.99 ID:l5tk1soN - >>16
投稿成功 ただ、formatは型安全じゃないのでString(val, radix:16)を使う方がswiftらしいと思うな
|
- 詰めswift [無断転載禁止]©2ch.net
18 :デフォルトの名無しさん[]:2016/10/21(金) 00:46:56.25 ID:l5tk1soN - >>16
func toHex<T:UnsignedInteger>(_ intVal:T)->String{ let byteLen=MemoryLayout<T>.size let hexStr=String(intVal, radix:16) return String(repeating:"0",count:byteLen*2-hexStr.characters.count)+hexStr } こっちの方がミスらないと思う Foundationのimportも要らないし しかしString.padding()って頭詰には使えないのか?使えたらもう少し綺麗に書けるのだけど
|