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共にこの自前実装を呼び出すようにするといいかも知れない。