iOS蓝牙通信 - 数据转换

108 阅读1分钟

大端小端

  • 测试
    int32_t a = 0x1122;
    int32_t big = CFSwapInt32HostToBig(a);
    NSData *data = [NSData dataWithBytes:&a length:sizeof(a)];
    NSData *datab = [NSData dataWithBytes:&big length:sizeof(big)];
    
    小端序 data: 0x22 0x11 0x00 0x00 
    大端序 datab: 0x00 0x00 0x11 0x22 
    
  • 是否是小端模式
    - (int) isLittleEndian
    {
        int i = 0x12345678;
        char *c = &i;
        return ((c[0] == 0x78) && (c[1] == 0x56) && (c[2] == 0x34) && (c[3] == 0x12));
    }
    

数据转换

  • int 转 NSData

    int value  = 1;
    NSData *data = [NSData dataWithBytes:&value length:1];    
    
  • NSData 转 int

    int value = 0;
    [data getBytes:&value range:NSMakeRange(0, 2)];
    
  • 数组 转 NSData

    • 写法1
    NSMutableData *data = [NSMutableData data];
    Byte value = 0x01;
    [data appendBytes:&value length:sizeof(value)];
    
    • 写法2
    NSMutableData *data = [NSMutableData data];
    Byte value[6] = {0x06,0x00,0x00,0x03,0x04,0x04};
    [data appendBytes:value length:sizeof(value)];
    
    • 写法3
    Byte value[6] = {0};
    value[0]=0x06;
    value[1]=0x00;
    value[2]=0x00;
    value[3]=0x03;
    value[4]=0x04;
    value[5]=0x04;
    NSData * data = [NSData dataWithBytes:value length:sizeof(value)];
    
  • Byte 转 NSData

    Byte byte  = 0x55;
    NSData *data = [NSData dataWithBytes:&byte lenght:7];
    
  • NSData 转 Byte

    NSString *str = @"123";  
    NSData *data = [str dataUsingEncoding: NSUTF8StringEncoding];  
    Byte *byte = (Byte *)[data bytes];