NSInteger を NSUInteger に変換しようとしていますが、グーグルで検索しましたが、本当の答えが見つかりませんでした。どうすればいいですか?
25803 次
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 に答える