我將數據字節存儲在數組中。現在,在我使用getBytes的程序中:range:NSmakeRange(position,length)。當我打印我收到的字節時,我認爲他們的位置已經交換,我的回答是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數據格式的傳感器設備接收數據時,我需要在我的IOS中使用CFSwap ... BigToHost對嗎?由於我的機器使用Little Endian格式! – Raj0689
如果傳感器的數據是big-endian,那麼是的,您必須使用'CFSwap ... BigtoHost'。這將允許您的iOS應用程序在真實iOS設備上運行時以及在模擬器中運行時正常工作。 – rmaddy