iOS用のobjective-cライブラリには、エンディアンに関して整数と整数の間でバイトを変換するためのユーティリティまたはマクロが組み込まれていますか?Objective-Cのビット変換ツール
ビットシフト操作を使用するように教えてください。私はそれが既に存在する場合、これを行うカスタムコードを書くことを避けようとしています。
NSData *をプリミティブ型(int、uint、shortなど)に変換し、プリミティブ型をNSData *に変換するコードが欲しいです。
iOS用のobjective-cライブラリには、エンディアンに関して整数と整数の間でバイトを変換するためのユーティリティまたはマクロが組み込まれていますか?Objective-Cのビット変換ツール
ビットシフト操作を使用するように教えてください。私はそれが既に存在する場合、これを行うカスタムコードを書くことを避けようとしています。
NSData *をプリミティブ型(int、uint、shortなど)に変換し、プリミティブ型をNSData *に変換するコードが欲しいです。
NSData
からバイトを取得するには、bytes
プロパティにアクセスします。それから、あなたが望むどんなタイプのポインタにもキャストしてください。明らかに、エンジニアがあなたのNSData
のエンディアンとサイズを知っていることを確認する必要があります。
#include <CFByteOrder.h>
// Bytes to uint32_t
NSData *data = <THE_DATA>;
void *bytes = [data bytes];
uint32_t *intBytes = (NSInteger*)bytes;
uint32_t swapped = CFSwapInt32BigToHost(*intBytes); ///< If the data in `data' is big endian
// uint32_t to bytes
uint32_t someInt = 1234;
uint32_t swappedInt = CFSwapInt32HostToBig(someInt); ///< If we want to store in big endian
NSData *data = [NSData dataWithBytes:&swappedInt length:sizeof(swappedInt)];
あなたはCFSwapInt32 *ファミリーの機能が必要だと思います。
Apple's docsを参照してください。
これはの世話をします私の質問のエンディアン部分ですが、私はバイトからデータへと逆に進むいくつかのコードを探しています。 – Brian
さて、質問のその部分はこれまでになかった。もう一つの答えはその部分を扱います。 –
squillionの選択肢ここhttp://stackoverflow.com/questions/2182002/convert-big-endian-to-little-endian-in-c-without-using-provided-func –