2013年12月24日 星期二

iOS7似乎是little-endian

因為我一開始想對<dd07>做swap之後再印出數值,結果是65XXX多少的,後來把swap拿掉,就印出我真正想要的數字2013

//以下為程式碼
    NSData *myData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Test" ofType:@"bin"]];
    
    NSLog(@"myData:%@",myData);
    NSRange range = NSMakeRange(0, 2);
    NSLog(@"year data:%@",[myData subdataWithRange:range].description);
    NSData* yearData = [myData subdataWithRange:range];
    unsigned short x;
    [yearData getBytes:&x length:sizeof(x)];
    NSLog(@"x:%x",x);
    //unsigned short year = [self swap:x];
    NSLog(@"year:%hu",x);

year data:<dd07>
x:7dd
year:2013

-(UInt16) swap:(UInt16)s {
    NSLog(@"swap");
    UInt16 temp = s << 8;
    NSLog(@"%x",temp);
    temp |= (s >> 8);
    NSLog(@"%x",temp);
    return temp;
}

//20140207發現
iOS7在寫入時,不會自動換成little-endian
所以結論是,
讀取時,是以little-endian的方式直接讀取data
寫入時,是以data的格式直接寫入,所以要先swap成little-endian的排列,再寫入。

沒有留言:

張貼留言