25

NSInteger を NSUInteger に変換しようとしていますが、グーグルで検索しましたが、本当の答えが見つかりませんでした。どうすればいいですか?

4

4 に答える 4

36

NSIntegerプリミティブ整数型のNSUInteger単なる typedef です。

#if __LP64__ || NS_BUILD_32_LIKE_64
  typedef long NSInteger;
  typedef unsigned long NSUInteger;
#else
  typedef int NSInteger;
  typedef unsigned int NSUInteger;
#endif

そのため、それらの間で「変換」する必要はありません。単純なキャストで十分です。お気に入り:

NSInteger myInt = 0;
NSUInteger unsignedInt = (NSUInteger)myInt;
于 2011-08-07T05:43:26.750 に答える
8

これは、この問題に出くわした他の人にとって役立つ可能性があるため、ここにキャストの実際の効果を示す小さな表があります. これらの値は、16 進値としてデバッガーから直接取得されました。キャスティングが効果をもたらすことがわかるように、それに応じて選択してください。32 ビットの場合は下部ffffffffを切り取り、16 ビットの場合は下部ffffffffffffを切り取ります。また、-1 は常に 0xffffffffffffffff です。

NSInteger si = NSIntegerMax;    // si   NSInteger   0x7fffffffffffffff
si = -1;                        // si   NSInteger   0xffffffffffffffff
si = (NSInteger)-1;             // si   NSInteger   0xffffffffffffffff
si = (NSUInteger)-1;            // si   NSInteger   0xffffffffffffffff
si = NSUIntegerMax;             // si   NSInteger   0xffffffffffffffff
si = (NSInteger)NSIntegerMax;   // si   NSInteger   0x7fffffffffffffff
si = (NSUInteger)NSIntegerMax;  // si   NSInteger   0x7fffffffffffffff
si = (NSInteger)NSUIntegerMax;  // si   NSInteger   0xffffffffffffffff
si = (NSUInteger)NSUIntegerMax; // si   NSInteger   0xffffffffffffffff

NSUInteger ui = NSUIntegerMax;  // ui   NSUInteger  0xffffffffffffffff
ui = -1;                        // ui   NSUInteger  0xffffffffffffffff
ui = (NSInteger)-1;             // ui   NSUInteger  0xffffffffffffffff
ui = (NSUInteger)-1;            // ui   NSUInteger  0xffffffffffffffff
ui = NSIntegerMax;              // ui   NSUInteger  0x7fffffffffffffff
ui = (NSInteger)NSIntegerMax;   // ui   NSUInteger  0x7fffffffffffffff
ui = (NSUInteger)NSIntegerMax;  // ui   NSUInteger  0x7fffffffffffffff
ui = (NSInteger)NSUIntegerMax;  // ui   NSUInteger  0xffffffffffffffff
ui = (NSUInteger)NSUIntegerMax; // ui   NSUInteger  0xffffffffffffffff
于 2012-02-23T23:14:43.557 に答える