为什么Objective-C中的20Byte NSData转换后uint8_t的大小是8Byte?
Why the size of uint8_t is 8 Byte after convert from 20Byte NSData in Objective-C?
我正在 ios objective-c BLE 中开发,我收到 BLE 数据 并通过 NSLog
如下所示:
NSData *initialData = [characteristic value];
NSData *startOfFrameData = [initialData subdataWithRange:NSMakeRange(0, 20)];
NSLog(@"StartOfFrameData: %@", startOfFrameData);
日志中的数据是这样的:
StartOfFrameData: <04621281 00931012 fed0d499 e92ceaac 3286513e>
但我通过以下代码将其转换为uint8_t
后它只有8个字节:
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
为什么转换为uint_8
后只有8个字节?
我是不是漏了什么?提前致谢。
在您的 for 循环中,您要求 tempData1
的大小。 tempData1
是 uint_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]);
}
我正在 ios objective-c BLE 中开发,我收到 BLE 数据 并通过 NSLog
如下所示:
NSData *initialData = [characteristic value];
NSData *startOfFrameData = [initialData subdataWithRange:NSMakeRange(0, 20)];
NSLog(@"StartOfFrameData: %@", startOfFrameData);
日志中的数据是这样的:
StartOfFrameData: <04621281 00931012 fed0d499 e92ceaac 3286513e>
但我通过以下代码将其转换为uint8_t
后它只有8个字节:
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
为什么转换为uint_8
后只有8个字节?
我是不是漏了什么?提前致谢。
在您的 for 循环中,您要求 tempData1
的大小。 tempData1
是 uint_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]);
}