سؤال

وأنا في حاجة لتحويل قيمة طويلة من int64 إلى NSData، حتى أتمكن من بعد تشغيل خوارزمية البعثرة على ذلك. I أداء:

int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];

NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);

وحدة الانتاج الناتجة مثل هذا:

و6201314301187184 9000000000000000000

وماذا NSData غير صحيح تخزين قيمة الرقم الطويل؟ إذا قمت بتشغيل هذا في حلقة، وNSData بايت الانجراف، بدءا من 620، ثم 621 وعلى. أنا إخراج عنوان longNumber عبر [عازلة بايت] وليس قيمتها؟

هل كانت مفيدة؟

المحلول

لديك مسألتين رئيسيتين: أولا، رقمك كبير جدا لفترة طويلة أنك الصب ل. بدلا من 9000000000000000000L يجب أن يكون 9000000000000000000LL للإشارة إلى ثابت طويل.

وثانيا، أجبت على سؤالك بشكل صحيح، كنت تطبع من عنوان. استبدال خط NSLog الخاص بك مع مع هذا السطر:

NSLog(@"%lld", *((int64_t*)[buffer bytes]));

وسترى النتيجة التي تتوقعها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top