OSType, FourCharCode から NSString への変換
いろいろデバッグしていて OSType
や FourCharCode
を扱う事があるので備忘。
OS Xだと Foundation.framework に NSFileTypeForHFSTypeCode
という便利な関数が用意されている。
この関数はシングルクォーテーションで囲われた文字列を生成する。
OSType type = 'appl'; NSLog(@"type = %@", NSFileTypeForHFSTypeCode(type)); // type = 'appl'
もう1つ、CoreServices.framework の LaunchServices.framework に UTCreateStringForOSType
という関数がある。
返り値は CFStringRef
なので、release するのを忘れないようにしなければならない。
こちらはシングルクォーテーション無しで文字列を生成してくれる。
OSType type = 'appl'; NSLog(@"type = %@", CFBridgingRelease(UTCreateStringForOSType(type))); // type = appl
これらの関数はどちらもOS X用のものでiOSでは使えない。
UTCreateStringForOSType
は iOS では MobileCoreServices.framework の UTType.h に載ってはいるけど
__OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_NA);
となっている。
という事でiOSでは自前で変換を行ってやる必要がある。
OSType type = 'appl'; unichar c[4]; c[0] = (type >> 24) & 0xFF; c[1] = (type >> 16) & 0xFF; c[2] = (type >> 8) & 0xFF; c[3] = (type >> 0) & 0xFF; NSString *string = [NSString stringWithCharacters:c length:4]; NSLog(@"type = %@", string);
マルチプラットフォームなライブラリを作る場合はこれを関数化してiOS, OS X共にこの自前実装を呼び出すようにするといいかも知れない。