それはエンディアンに関連しています。Endian.h で定義されている変換マクロを使用します。
EndianU16_BtoN(value)
EndianU16_NtoB(value)
EndianS32_BtoN(value)
EndianS32_NtoB(value)
EndianU32_BtoN(value)
EndianU32_NtoB(value)
EndianS64_BtoN(value)
EndianS64_NtoB(value)
EndianU64_BtoN(value)
EndianU64_NtoB(value)
etc.
メソッド シグネチャの意味は次のとおりです。
符号なしのエンディアン + U 符号付きの S + ビット数 + Nはシステムのネイティブ エンディアン、Lはリトル エンディアン、Bはビッグ エンディアン
したがって、コンテンツ (0x00、0xE0) を持つ NSData があり、それを値 14 として解釈したい場合、データはビッグ エンディアン順で含まれているため、EndianU32_BtoNを使用する必要があります(もちろん、このマクロは、ビッグ エンディアン システムでの恒等変換であり、リトル エンディアン マシンでのみバイトを交換します)。
重要: 将来を見越して、NSUInteger の代わりに別のものを使用することをお勧めします。これは、この型の幅がシステムによって異なる可能性があるためです (たとえば、Apple は NSUInteger を arm64 システムで 64 ビットと定義しています)。したがって、ビット数を明示するには、uint32_t または uint64_t などを使用します。
編集:ビッグエンディアンの短い値の使用法
NSMutableData * data = [[NSMutableData alloc] initWithLength:2];
((unsigned char *)data.mutableBytes)[0] = 0x00;
((unsigned char *)data.mutableBytes)[1] = 0x0E;
NSUInteger integer = NSSwapBigShortToHost(*(unsigned short *)data.mutableBytes);
NSLog(@"%d", integer); // prints 14