Я сохранил байты данных в массиве. Теперь в программе я использовал getBytes: range: NSmakeRange (позиция, длина). Когда я печатал полученные байты, я думаю, что их позиция поменялась, и мой ответ был 0x0292 вместо 0x9202 (проверьте мою программу ниже).Нужно ли менять байты в этом сценарии в Objective-c?
Теперь я смущен, на каком правильном ответе. Мне действительно необходимо всегда менять байты, которые я получил. Пожалуйста, объясните мне эту концепцию, чтобы я мог ясно понять.
Вот мой код! Спасибо.
const Byte dataBytesArray[] = {
0x92, 0x02, 0x13, 0x14 //in Hex
};
NSData *myDataArray = [[NSData alloc]initWithBytes:dataBytesArray length:4];
uint16_t ef;
[myDataArray getBytes:&ef range:NSMakeRange(0, 2)];
NSLog(@"dataByteArray is %@ ",[NSNumber numberWithUnsignedInteger:ef]);//the answer I got is 658 in decimal format which is 0x0292
uint16_t swapping = CFSwapInt16BigToHost(ef); //swapping the bytes
NSLog(@"swap is %@ ",[NSNumber numberWithUnsignedInteger:swapping]); //after swapping I got 37378 which is 0x9202
Привет, Спасибо за ваш предыдущий ответ. Я также использовал CFByteOrderGetCurrent() и узнал, что моя машина использует Little Endian Format. Итак, когда я получаю данные с сенсорного устройства, которое использует формат данных MSB для LSB, тогда мне нужно использовать CFSwap ... BigToHost в моей IOS? Так как моя машина использует формат Little Endian! – Raj0689
Если данные вашего сенсора имеют большой размер, тогда да, вы должны использовать 'CFSwap ... BigtoHost'. Это позволит вашему приложению iOS нормально работать при запуске на реальном устройстве iOS, а также при запуске в симуляторе. – rmaddy