私はNSIntegerをNSUIntegerに変換しようとしています。私はそれをgoogledして本当の答えは見つけませんでした。どうすればいい?NSIntegerをNSUIntegerに変換しますか?
答えて
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
を、あなたはそれらの間の「変換」する必要はありません。シンプルなキャストで十分です。 Like:
NSInteger myInt = 0;
NSUInteger unsignedInt = (NSUInteger)myInt;
これは、この問題を克服する他のユーザーにとって役立つかもしれないので、キャストの実際の効果を示す小さな表があります。これらの値は、デバッガから直接16進値として取得されました。それに応じて選択してください。 32ビットの場合は、最下位ビットをfffffff、最下位ビットを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
あなたのNSInteger
がゼロ以上であることが確実な場合は、単にNSUInteger
としてそれをキャスト。 NSInteger
が負数を表す場合は、NSUInteger
にキャストしないでください。矛盾が生じる可能性があります。
if (unsignedInteger == signedInteger) {
// is TRUE
}
if (signedInteger == 4294967266) {
// is FALSE
}
if (signedInteger == -30) {
// is TRUE
}
if (unsignedInteger == 4294967266) {
// is TRUE
}
if (unsignedInteger == -30) {
// is TRUE
}
。H 'の#define NSUIntegerMax ULONG_MAX' 'のNSLog(@ "ULONG_MAX:%LU"、ULONG_MAX);' ' ULONG_MAX:4294967295' 4294967295から30 + 1 = 4294967266 +1ための ' NSIntegerのUI = NSIntegerMax; 'UI = -1; ' UI =(NSUInteger)-1; ' –
で
NSInteger signedInteger = -30;
NSUInteger unsignedInteger = (NSUInteger)signedInteger;
結果あなたは符号なし整数に整数に変換するために欠けている場合、あなたはどちらかあなたは整数が負になることはありませんことを知っている状況にありますすべての負の値を絶対値(つまり、符号なしの値)に変換したい場合があります。絶対値にこの変換を行うことは簡単である:
NSInteger mySignedInteger = -100;
NSUInteger myUnsignedInteger = fabs(mySignedInteger);
fabs()
は、浮動小数点の絶対値を返すC関数です。ここでmyUnsignedInteger
の値は100です。
このような関数の使用例は、負の値を別の形式で表示する場合に表示されます。例えば、負の数を占めるの括弧内に表示されます。技術的な観点から、あなたは、単にNSUInteger-これもキャストが、ときNSIntegerを必要としないにNSIntegerを割り当てることができることを
NSString * numberForDisplay;
if (mySignedInteger < 0) {
numberForDisplay = [NSString stringWithFormat:@"(%lu)", myUnsignedInteger];
} else {
numberForDisplay = [NSString stringWithFormat:@"%lu", myUnsignedInteger];
}
注意をNSUIntegerは非常に大きな正の数を返しますが、これは明らかに非常に望ましくない副作用です:
NSUInteger myUnsignedInteger = mySignedInteger;
- 1. int、NSInteger、NSUIntegerの相違点
- 2. CFIndexをNSUIntegerに変換しますか?
- 3. NSIntegerをNSTimeIntervalに変換するには
- 4. NSUIntegerとNSIntegerの実装における相反するパラメータの型式
- 5. iPhoneアプリケーションでNSStringをNSIntegerに変換するには?
- 6. NSIntegerをNSIntegerに連結する
- 7. NSStringからNSIntegerへのIPAddressの変換と操作
- 8. NSInextxpathをNSIntegerまたは単にintに変換するにはどうすればよいですか?
- 9. NSUIntegerのNSNotFoundが返されますか?
- 10. - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
- 11. NSIntegerを*
- 12. 暗黙の変換が整数精度を失う:(別名「unsigned long型」)NSUInteger「INT」
- 13. NSintegerのアドレスはインクリメントして変更されます
- 14. NSIntegerをtableViewコントローラに渡す
- 15. 目的c暗黙の変換で整数精度 'NSUInteger'が失われる
- 16. NSInteger!= nil
- 17. NSIntegerでfor-inループを使用しますか?
- 18. コアデータにNSIntegerを格納
- 19. 分裂およびNSUInteger
- 20. NSIntegerをNSMutableDataに追加する
- 21. Xml NSStringをNSIntegerにパースする
- 22. tableViewからNSUIntegerを返すのはいいですか?numberOfRowsInSection?
- 23. NSIntegerの決定方法はNSRangeにありますか?
- 24. SQLをHQLに変換しますか?
- 25. System.Web.UI.WebControls.ImageをSystem.Drawing.Imageに変換しますか?
- 26. NSStringをUTF8Stringに変換しますか?
- 27. intをcharに変換しますか?
- 28. イメージをバイナリに変換しますか?
- 29. SQLiteをHTMLに変換しますか?
- 30. イメージをXAMLに変換しますか?
グラッツィ、私のために働いた2番目の小さなコード! –
符号なしintをunsigned intにキャストしていない危険ですか?私は、符号ビットが符号なし整数の値として解釈される可能性があるので、破損を引き起こす可能性があることを読んでいますか?あるいは、Cがそれを防ぐためにすべての作業をしていますか? NSObjCRuntimeの –