2011-12-18 13 views
3

iOS用のobjective-cライブラリには、エンディアンに関して整数と整数の間でバイトを変換するためのユーティリティまたはマクロが組み込まれていますか?Objective-Cのビット変換ツール

ビットシフト操作を使用するように教えてください。私はそれが既に存在する場合、これを行うカスタムコードを書くことを避けようとしています。

NSData *をプリミティブ型(int、uint、shortなど)に変換し、プリミティブ型をNSData *に変換するコードが欲しいです。

+1

squillionの選択肢ここhttp://stackoverflow.com/questions/2182002/convert-big-endian-to-little-endian-in-c-without-using-provided-func –

答えて

9

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)]; 
4

あなたはCFSwapInt32 *ファミリーの機能が必要だと思います。

Apple's docsを参照してください。

+0

これはの世話をします私の質問のエンディアン部分ですが、私はバイトからデータへと逆に進むいくつかのコードを探しています。 – Brian

+0

さて、質問のその部分はこれまでになかった。もう一つの答えはその部分を扱います。 –

関連する問題