2017-05-15 6 views
1

ich entwickeln werde in ios Objective-c BLE, erhalte ich die BLE Daten und Druck von NSLog wie folgt aus:Warum ist die Größe von uint8_t 8 Byte nach Konvertierung von 20Byte NSData in Objective-C?

NSData *initialData = [characteristic value]; 
NSData *startOfFrameData = [initialData subdataWithRange:NSMakeRange(0, 20)]; 
NSLog(@"StartOfFrameData: %@", startOfFrameData); 

Die Daten im Protokoll ist wie folgt aus:

StartOfFrameData: <04621281 00931012 fed0d499 e92ceaac 3286513e> 

Aber es hat nur 8 Byte, nachdem ich es auf die uint8_t über den folgenden Code konvertieren:

uint8_t *tempData1=(uint8_t *)[startOfFrameData bytes]; 
NSLog(@"before tempData1:%lu", sizeof(tempData1)); 
for(int i = 0;i<sizeof(tempData1);i++){ 
    NSLog(@"tempData1[%d] = %x , %d",i,tempData1[i],tempData1[i]); 
} 

Die Log-Show wie folgt aus:

tempData1:8 
tempData1[0] = f4 , 244 
tempData1[1] = 9b , 155 
tempData1[2] = b2 , 178 
tempData1[3] = 81 , 129 
tempData1[4] = 0 , 0 
tempData1[5] = 6 , 6 
tempData1[6] = 5 , 5 
tempData1[7] = 71 , 113 

Warum es nur 8 Byte zu uint_8 nach verdeckte hat?

Habe ich etwas übersehen? Danke im Voraus.

Antwort

2

In Ihrer for-Schleife fragen Sie nach der Größe tempData1. tempData1 ist vom Typ uint_8t *, der ein Zeiger ist. Zeiger enthalten Speicheradressen und in diesem Fall ist die Speicheradresse 8 Bytes.

Sie sollten wahrscheinlich bis startOfFrameData.length iterieren.

Zum Beispiel:

uint8_t *tempData1 = (uint8_t *)[startOfFrameData bytes]; 

for(int i = 0; i < startOfFrameData.length; i++){ 
    NSLog(@"tempData1[%d] = %x , %d",i,tempData1[i],tempData1[i]); 
} 
Verwandte Themen