2017-05-15 53 views
1

我在開發的ios Objective-C的BLE,我通過NSLog收到BLE數據和打印類似如下:在日誌中爲什麼uint8_t在Objective-C中從20Byte NSData轉換後的大小是8字節?

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

的數據是這樣的:

StartOfFrameData: <04621281 00931012 fed0d499 e92ceaac 3286513e> 

但它只有8字節後,我通過以下代碼將其轉換爲uint8_t

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]); 
} 

日誌顯示類似如下:

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 

爲什麼只有後隱蔽8字節到uint_8

我錯過了什麼嗎?提前致謝。

回答

2

在您的for循環中,您要求的尺寸爲tempData1tempData1uint_8t *這是一個指針。指針包含內存地址,在這種情況下,內存地址是8個字節。

你應該迭代到startOfFrameData.length

例如:

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]); 
}