可视化逆序操作

从可视化数据中得到真实数据,并且得到的可视化数据是小端显示的,2字节组合逆序。
例如:

接收到的小端数据信息: 1A2B   数据形式是:0x31413242.     //总共4Bytes,31表示1,41表示A
需要求得的数据是:0x2B1A   //总共2Bytes

测试:

        UInt32 a = 0x31413242;
        NSData *data = [NSData dataWithBytes:&a length:sizeof(a)];
        NSLog(@"%@",data);
        NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
  //打印结果:
//2018-05-23 11:23:20.205453+0800 TestOC[3593:349610] <42324131>
//2018-05-23 11:23:20.205708+0800 TestOC[3593:349610] B2A1
因为本机是小端显示,得到打印的B2A1是按字节逆序的结果

求解的过程:
注:接收的4bytes小端数据:0x31413242. 显示结果是:1A2B. 求2bytes结果0x2B1A

        UInt32 a = 0x31413242;
        NSData *receiveData = [NSData dataWithBytes:&a length:sizeof(a)];
        NSLog(@"原始数据(小端打印):%@",receiveData);
        
        NSMutableData *resultData = [[NSMutableData alloc] initWithCapacity:2];
        
        for (NSInteger i = receiveData.length * 0.5 - 1; i >= 0 ; i--) {
            NSData *subData = [receiveData subdataWithRange:NSMakeRange(i * 2, 2)];
            UInt8 b = 0;
            UInt8 resultB = 0; //将两个字节转化为1个字节
            for (NSInteger j = 0; j < 2; j++) {
                [subData getBytes:&b range:NSMakeRange(j, 1)];
                if (b >= '0' && b <= '9') {
                    b = b - '0';
                }
                else if (b >= 'a' && b <= 'f') {
                    b = b - 'a' + 10;
                }
                else if (b >= 'A' && b <= 'F') {
                    b = b - 'A' + 10;
                }
                else {
                    continue;
                }
                resultB |= b << (1 -j) * 4 ;  //第一个字节需要移动,第二个不需要移动
            }
            NSData *resultSubData = [NSData dataWithBytes:&resultB length:1];
            
            [resultData appendData:resultSubData];
        }
        
        NSLog(@"得到结果(小端打印)%@",resultData);
        
        //2018-05-23 13:32:49.018896+0800 TestOC[3842:465923] 原始数据(小端打印):<42324131>
        //2018-05-23 13:32:49.133772+0800 TestOC[3842:465923] 得到结果(小端打印)

因为resultData是小端数据形式,实际得到的是0x2b1a

你可能感兴趣的:(可视化逆序操作)