关于字节序:--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;
}