【发布时间】:2010-06-21 19:04:45
【问题描述】:
在 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 changingNSSapBigIntToHostintoNSSwapLittleInttoHost`。我什至尝试了 long,但结果仍然相同,我得到了错误的值。我做错了什么?
PS:我的代码中的一些变量已经在我的程序的其他地方设置了。 BITPIX 是每个像素的位大小。在本例中为 32。GCOUNT 等于 1,PCOUNT 为 0,Nelements 是我应该在我的图像中拥有的像素总数。
【问题讨论】:
标签: objective-c nsdata