[IOS] IOS设备与BLE设备通信字节序问题

关于字节序:--from 维基百科

在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。

而存储地址内的排列则有两个通用规则。一个多位的整数将按照其存储地址的最低或最高字节排列。如果最低有效字节在最高有效字节的前面,则称小端序;反之则称大端序。在网络应用中,字节序是一个必须被考虑的因素,因为不同机器类型可能采用不同标准的字节序,所以均按照网络标准转化。

例如假设上述变量x类型为int,位于地址0x100处,它的十六进制为0x01234567,地址范围为0x100~0x103字节,其内部排列顺序依赖于机器的类型。大端法从首位开始将是:0x100: 01, 0x101: 23,..。而小端法将是:0x100: 67, 0x101: 45,..

OS 设备:小端

Mac OS :小端

BLE 设备(iBeacon等:大端,

网络字节序:大端

关于字节序:

iOS中的字节序 这篇文章写的非常好、给的链接也非常棒~ 强烈推荐下


开源下自己下的大小端转换代码,欢迎拍砖 T_T

相关代码:


- (u_int8_t *)htonRand:(void *)byte length:(NSUInteger)length
{
    u_int8_t *result = malloc(length);
    for ( int i = 0; i < length; i ++) {
        *(result + i) = *((u_int8_t *)(byte + length - i - 1));        
    }

    NSString *key = @"";
    for ( int i = 0; i < length ; i ++) {
        key = [NSString stringWithFormat:@"%@%02hhX",key,*((u_int8_t *)byte + i)];
    }
    NSLog(@"Byte: %@",key);
    
    key = @"";
    for ( int i = 0; i < length ; i ++) {
        key = [NSString stringWithFormat:@"%@%02hhX",key,*(result + i)];
    }
    NSLog(@"Result: %@",key);
    return  result;
}





你可能感兴趣的:(IOS开发)