Lưu trữ số nguyên iOS LSB (byte quan trọng thấp nhất) trong byte đầu tiên và MSB trong byte cuối cùng. Tôi có thói quen chuyển đổi để kiểm tra tất cả những điều đó. kiểm tra ở đây,
thử nghiệm ...
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;
}
Tùy thuộc vào nguồn gốc của dữ liệu, bạn có thể cần xem xét tính cuối của dữ liệu.Nếu dữ liệu được tạo ra và chỉ chuyển giao xung quanh trong mã của bạn thì bạn sẽ ổn, nếu không bạn cần phải nhận thức được chút/lớn endian. – Joe
có thể trùng lặp của [Chuyển đổi NSdata thành byte và sau đó chuyển đổi n byte đầu tiên thành int] (http://stackoverflow.com/questions/7330436/converting-nsdata-to-bytes-then-converting-the-first-n- byte-to-int) –