[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;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值