Используя основу и какао-фреймворки на Mac, я пытаюсь преобразовать объект NSData в понятное человеку число.Допустим, объект NSData является изображением NPIXEL.Я знаю, что двоичные данные кодируются с прямым порядком байтов и представляют 32-разрядное целое число (точнее 32-разрядное целое число с двумя дополнениями).Я пишу фрагмент кода ниже, чтобы преобразовать NSData в массив int.Но полученное мной значение совершенно неверно (это не значит, что измерения плохие, я использовал специальное программное обеспечение для считывания данных, и значение, данное программным обеспечением, отличается от того, которое я получил с моим кодом).
-(int *) GetArrayOfLongInt
{
//Get the total number of element into the Array
int Nelements=[self NPIXEL];
//CREATE THE ARRAY
int array[Nelements];
//FILL THE ARRAY
int32_t intValue;
int32_t swappedValue;
double Value;
int Nbit = abs(BITPIX)*GCOUNT*(PCOUNT + Nelements); Nbit/=sizeof(int32_t);
int i=0;
int step=sizeof(int32_t);
for(int bit=0; bit < Nbit; bit+=step)
{
[Img getBytes:&swappedValue range:NSMakeRange(bit,step)];
intValue= NSSwapBigIntToHost(swappedValue);
array[i]=intValue;
i++;
}
return array;
}
Этот фрагмент кода (с незначительными изменениями) отлично работает, когда двоичные данные представляют собой числа с плавающей или двойной точностью, но я не надеваю t when it is 16,32 or 64 bit integer. I also tried changing
NSSapBigIntToHost into
NSSwapLittleInttoHost`.Я даже пытался долго, но результаты все те же, я получил плохие значения.Что я делаю неправильно?
PS: некоторые переменные в моем коде уже установлены в другом месте моей программы.BITPIX - размер в битах каждого пикселя.В данном случае 32. GCOUNT равно 1, PCOUNT 0, а Nelements - это общее количество пикселей, которое я должен иметь на своем изображении.