Objective c 如何在Objective中将字节数组转换为浮点值?

Objective c 如何在Objective中将字节数组转换为浮点值?,objective-c,Objective C,我将长字节数组作为 Byte *GolfResult = (Byte*)calloc(40, sizeof(Byte)); 这些字节是十六进制值 对于每四个字节,我喜欢转换为float。 我要做的是,制作一个四字节数组 unsigned char *fourbytearray = (unsigned char *)calloc(4, sizeof(unsigned char)); 然后每四个字节复制一次这个四字节数组 fourbytearray[3] = GolfResult[0]; fou

我将长字节数组作为

Byte *GolfResult = (Byte*)calloc(40, sizeof(Byte));
这些字节是十六进制值

对于每四个字节,我喜欢转换为float。 我要做的是,制作一个四字节数组

unsigned char *fourbytearray = (unsigned char *)calloc(4, sizeof(unsigned char));
然后每四个字节复制一次这个四字节数组

fourbytearray[3] = GolfResult[0]; fourbytearray[2] = GolfResult[1]; fourbytearray[1] = GolfResult[2]; fourbytearray[0] = GolfResult[3];
然后转换为float

float result = [[NSNumber numberWithUnsignedChar:*bytearray] floatValue];
这是浪费时间,结果也不正确

例如,我有四个字节作为0x4148e7e1。如果我在这里将十六进制值转换为浮点值,我的正确结果是12.5666

但是如果我像
[[NSNumber numberwhithunsignedchar:*bytearray]
那样进行转换,结果是65。这是错误的

那么,将字节数组转换为每四个字节的浮点值的最佳方法是什么呢。

该方法只转换一个字节,即第一个字节。这就是为什么您得到的
65
等于第一个字节
0x41

这是因为
*bytearray
bytearray[0]
相同;只是数组的第一个元素。这可能有助于通读


正如,一旦您的字节正确排列并确保浮点格式匹配,您所需要做的就是强制转换。

我同意意义问题。就如何将字节存储为浮点数而言,您的字节顺序似乎是颠倒的。因为您的十六进制值只是使如果将浮点数递增,则只需告诉编译器应将该数字视为浮点数即可。一旦将字节按正确顺序排列,则此操作将有效

fourbytearray[0] = GolfResult[0]; 
fourbytearray[1] = GolfResult[1]; 
fourbytearray[2] = GolfResult[2];
fourbytearray[3] = GolfResult[3];
float result = *(float *)fourbytearray;

我尝试了你的值0x4148e7e1,得到了12.5566111。

是的,我确定我需要反转字节顺序。如果我想在转换器中得到结果,我该怎么做?是的,这4148e7e1是正确的字节顺序,如果我使用转换器转换,我得到了这12.566,这是正确的。我希望在目标c中得到相同的结果。对不起,这是浮动值。我使用floatValue进行浮点转换。我现在正在测试。这些字节来自何处?来自传感器。您在1月9日提出了相同的问题并接受了答案。如果您现在对该答案有疑问,请在此处进行评论(如果需要,请删除接受答案的选项),不要只是重复这个问题-这与SO MO相反。不,它不起作用。我有41998DD3。转换器有19.1943。该转换给了我0。你必须考虑endianness所以如何做到这一点?我的查询是在将四个字节复制到这个(unsigned char*fourbytearray)之后进行的,如何在目标C中获得与使用在线转换器相同的结果。@LGP是的,它可以工作。