通信周りでSocketをバイナリ単位で制御するとこの辺よく使うからメモ。
NSData内のバイナリ(16進数)を10進数の数値に変換する。(64bit長)
NSData *data
NSMutableString *t = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"%@",data]];
[t deleteCharactersInRange:NSMakeRange(0,1)];
[t deleteCharactersInRange:NSMakeRange(8,1)];
[t deleteCharactersInRange:NSMakeRange(16,1)];
unsigned long long value;
if ([ [ NSScanner scannerWithString:t ] scanHexLongLong:&value ] ) {
NSLog(@"value = %llu", value);
}
すごい強引なやり方ですが・・・
NSData内のバイナリを%@で出力してそれを文字列として保存。
その文字列から「<>」と半角スペースを削除する。
完全な16進数の文字列だけにしてから scanHexLongLongで16進数をLongLong型の整数に。
たぶんバイナリから直接整数値にする方法なんていくらでもあるんだろうけど、今回は諸事情でこの書き方で。
基本はMessagePackを使えば整数値をそのままエンディアン気にせず送れるんですけどねー
[2回]
PR
COMMENT