16进制数据发生高位字节和地位字节互换

在我蓝牙开发的时候,我从通过蓝牙获得设备的16进制数据流时,发生了高位字节和低位字节互换的情况,导致我解析的unicode数据是乱码。

举例:
\u9065表示“遥”,但是因为数据传输时发生了高位和低位的转换,所以我收到的实际是\u6590,解码出来的文字变成了“斐”。

解决办法

//这是我获取的有效的数据流
    NSString *dataString = @"6590dc8f2e006d007000330000000";
[self decodingHiloUnicodeData:dataString];

- (NSString *)decodingHiloUnicodeData:(NSString *)hexStr{
    NSMutableArray * hexArray = [[NSMutableArray alloc] init];
    
    //4位16进制数据表示一个字符,默认最后不满4位的16进制数据放一起
    for (int i=0; i
 */

-(NSData *)hexToBytes:(NSString *)str{
    NSMutableData* data = [NSMutableData data];  
    int idx;
    for (idx = 0; idx+2 <= str.length; idx+=2) {
        NSRange range = NSMakeRange(idx, 2);
        NSString* hexStr = [str substringWithRange:range];
        NSScanner* scanner = [NSScanner scannerWithString:hexStr];
        unsigned int intValue;
        [scanner scanHexInt:&intValue];
        [data appendBytes:&intValue length:1];
    }
    return data;
}

输出:
遥远.mp3

你可能感兴趣的:(16进制数据发生高位字节和地位字节互换)