2016-12-14 4 views
0

NSDataオブジェクトを読み込み可能な浮動小数点型配列に変換するにはどうすればよいですか?だから私は基本的にその配列内のポイントを選択し、値を取得することができますか?現在、私は次のようNSData getBytesを読み取り可能な浮動小数点に変換する

NSData *depthData = [NSData dataWithBytes:depthFrame.depthInMillimeters 
             length:depthFrame.width*depthFrame.height*4]; 
float z; 
[depthImageData getBytes:&z length:sizeof(float)]; 
NSLog(@"%f", z); 

持っていますが、どのように

NSLog(@"%f",depthFloatArry[100]) 

答えて

2

それはあなたが求めているものを完全には明らかではありません。あなたは必ずをしている場合は、バイトのバッファが適切にそう揃っていることを

  • あなたはdepthFrame.depthInMillimetersdepthFrame.width * depthFrame.heightfloat Sを含むバイトバッファであることを言っている場合は、オプションのカップルを持っています

    float *floatArray = (float*)depthFrame.depthInMillimeters; 
    NSLog(@"%f", floatArray[anyIndexInRange]); 
    

    これは回避:アドレスのメモリ位置での各float開始は4バイトの倍数であることを、あなたは、単に型キャストを使用することができますNSDataすでにデータが揃っていないか、またはあなたが必要な場合や、

  • そうでない場合は、他のいくつかの理由でNSDataあなたが一度に多くのfloat秒を取得するには、このような何かを行うことができ、持っている:

    size_t len = /* any value between 1 and depthFrame.width * depthFrame.height */; 
    float floatArray[len]; 
    [depthData getBytes:floatArray length:sizeof(floatArray)]; /* or sizeof(float) * len */ 
    
  • の場合あなたはちょうどあなたがこれを行うことができ、NSDataだけではなく、最初の1から任意の単一フロートを取得したい:

    NSUInteger offset = desiredIndex * sizeof(float); 
    float z; 
    [depthData getBytes:&z range:NSMakeRange(offset, sizeof(z))]; 
    
-1

一つのアプローチはNSArrayNSNumberのインスタンスにNSData内容を変換するだろうと言って変換することも可能であろう - 」あなたのことに注意してくださいNSArrayはオブジェクトだけを保持できるので、フロートをNSNumberにラップする必要があります。あなたはこのようにそれを使用することができます

@interface NSData(MyConversion) 
- (NSArray<NSNumber *> *)toFloatsArray; 
@end 

@implementation NSData(MyConversion) 
- (NSArray<NSNumber *> *)toFloatsArray { 
    NSInteger capacity = self.length/sizeof(float); 
    NSMutableArray<NSNumber *> *parsedNumbers = [[NSMutableArray alloc] initWithCapacity:capacity]; 
    for(NSInteger i=0; i<capacity; i++) { 
     float aFloat; 
     [self getBytes:&aFloat range:NSMakeRange(i*sizeof(float), sizeof(float))]; 
     [parsedNumbers addObject:@(aFloat)]; 
    } 
    return parsedNumbers; 
} 
@end 

、:

NSArray<NSNumber *> *numbers = [depthImageData toFloatsArray]; 
NSLog(@"%f", numbers[100].floatValue); 
// or 
NSLog(@"%@", numbers[100]); 
関連する問題