はじめに
需要があるかどうかは分かりませんが、16進数文字列をNSData化するコードを参考URLをほぼ丸パクリ参考にし、Swift対応にしました。
環境
- Xcode 7.01
- Swift
使い方(一例
let hexStr : NSString = "48656c6c6f20576f726c64"
let moji = NSString.init(data: hexStr.dataFromHexString()!, encoding: NSUTF8StringEncoding)
print(moji)
//-> Hello World
コード
何故かNSStringのextensionになっておりますが、適宜変更する方がよろしいかと思います。
NSStringEX.swift
import Foundation
extension NSString
{
func dataFromHexString() -> NSData?
{
var str = self.stringByReplacingOccurrencesOfString("<", withString: "")
str = str.stringByReplacingOccurrencesOfString(">", withString: "")
str = str.stringByReplacingOccurrencesOfString(" ", withString: "")
let nsstr = str as NSString
let chars = nsstr.UTF8String
var i = 0
let len = nsstr.length;
let data = NSMutableData(capacity: len/2)
var byteChars:[CChar] = [0,0]
var wholeByte :CUnsignedLong
while (i < len)
{
byteChars[0] = chars[i++];
byteChars[1] = chars[i++];
wholeByte = strtoul(byteChars, nil, 16);
data?.appendBytes(&wholeByte, length: 1)
}
return data;
}
}
参考URL
stack over flow -NSString (hex) to bytes-
http://stackoverflow.com/questions/2501033/nsstring-hex-to-bytes