0

たとえば、データを 16 進値として返すデバイスがあります00 00 00 56 00 00 01 00。これを NSString に配置します。3 番目と 4 番目のセグメントを double に変換することにのみ関心があります。すなわちのみ00 56

http://www.binaryhexconverter.com/hex-to-decimal-converterなどのサイトで機能し、必要な値を返します。

NSScanner を使用しようとすると、それが 16 進数コードのセグメントにすぎないことが気に入りません。

NSScanner *scanner = [[NSScanner alloc] initWithString:numberAsHex];

double value = 0.0;

BOOL result = [scanner scanHexDouble:&value];

NSLog(@"Value %@", [NSNumber numberWithDouble:value]);
NSLog(@"Result %c", result);

私もstrtol()同様に使用しようとしましたが、運がありません。

誰でも助けてもらえますか?

4

2 に答える 2

1

NSScannerの文字列は次のようになります。これがサンプルコードです(動作します)。

NSScanner *scanner = [[NSScanner alloc] initWithString:@"0x0056"];
double value = 0;
BOOL result = [scanner scanHexDouble:&value];

NSLog(@"Value %@", [NSNumber numberWithDouble:value]);
NSLog(@"Result %c", result);
于 2013-02-05T14:09:03.380 に答える
1
NSString *numberAsHex = @"00 00 00 56 00 00 01 00";
numberAsHex = [numberAsHex stringByReplacingOccurrencesOfString:@" " withString:@""];
numberAsHex = [NSString stringWithFormat:@"%@%@",@"0x",numberAsHex];
NSScanner *scanner = [[NSScanner alloc] initWithString:numberAsHex];
double value = 0.0;
BOOL result = [scanner scanHexDouble:&value];
NSLog(@"Value %@", [NSNumber numberWithDouble:value]);
NSLog(@"Result %d", result);
于 2013-02-05T14:21:04.777 に答える