आईओएस पूर्णांक भंडार पहले बाइट और पिछले बाइट में MSB में LSB (सबसे कम महत्वपूर्ण बाइट)। मेरे पास उन सभी चीजों का परीक्षण करने के लिए रूपांतरण दिनचर्या है। यहाँ की जाँच करें,
टेस्ट ...
int i = 2342342;
NSData * d1 = [Util dataFromInt:i]; // {[MSB], ..., ... ,[LSB]} <0023bdc6>
NSData * d2 = [NSData dataWithBytes:&i length:4]; // {[LSB], ..., ... ,[MSB]} <c6bd2300>
int ci1 = [Util intFromData:d1];
int ci2 = [Util intFromDataReverse:d2];
Util.m
+ (NSData *) dataFromInt:(int)num {
unsigned char * arr = (unsigned char *) malloc(sizeof(num) * sizeof(unsigned char));
for (int i = sizeof(num) - 1 ; i >= 0; i --) {
arr[i] = num & 0xFF;
num = num >> 8;
}
NSData * data = [NSData dataWithBytes:arr length:sizeof(num)];
free(arr);
return data;
}
// {[MSB], ..., ... ,[LSB]}
+ (int) intFromData:(NSData *)data
{
int intSize = sizeof(int); // change it to fixe length
unsigned char * buffer = malloc(intSize * sizeof(unsigned char));
[data getBytes:buffer length:intSize];
int num = 0;
for (int i = 0; i < intSize; i++) {
num = (num << 8) + buffer[i];
}
free(buffer);
return num;
}
// {[LSB], ..., ... ,[MSB]}
+ (int) intFromDataReverse:(NSData *)data
{
int intSize = sizeof(int);// change it to fixe length
unsigned char * buffer = malloc(intSize * sizeof(unsigned char));
[data getBytes:buffer length:intSize];
int num = 0;
for (int i = intSize - 1; i >= 0; i--) {
num = (num << 8) + buffer[i];
}
free(buffer);
return num;
}
डेटा की उत्पत्ति के आधार पर, आपको डेटा की अंतहीनता को ध्यान में रखना पड़ सकता है।यदि डेटा बनाया गया है और केवल आपके कोड में स्थानांतरित किया गया है तो आप ठीक होंगे, अन्यथा आपको छोटे/बड़े एंडियन के बारे में पता होना चाहिए। – Joe
संभावित डुप्लिकेट [NSData को बाइट्स में कनवर्ट करना और फिर पहले एन बाइट्स को int में परिवर्तित करना] (http://stackoverflow.com/questions/7330436/converting-nsdata-to-bytes-then-converting-the-first-n- बाइट्स-टू-इंट) –