Floating point iOS5 Xcode4.2浮点字节对齐错误?

Floating point iOS5 Xcode4.2浮点字节对齐错误?,floating-point,ios5,xcode4.2,Floating Point,Ios5,Xcode4.2,请看以下代码: 这是带有1字节结构打包的结构定义文件(用于套接字网络) 嗯。现在请参见下面的简单代码: TestStruct2 wtf; wtf.v1 = 0; wtf.v2 = 0; wtf.v3 = 0; wtf.value = 4294967295; wtf.ts1.d1 = 37.785834f; wtf.ts1.d2 = 37.785834f; char * cp = (char *)&wtf; for (int i = 0; i < sizeof(TestStruct2

请看以下代码:

这是带有1字节结构打包的结构定义文件(用于套接字网络)

嗯。现在请参见下面的简单代码:

TestStruct2 wtf;
wtf.v1 = 0;
wtf.v2 = 0;
wtf.v3 = 0;
wtf.value = 4294967295;
wtf.ts1.d1 = 37.785834f;
wtf.ts1.d2 = 37.785834f;
char * cp = (char *)&wtf;
for (int i = 0; i < sizeof(TestStruct2); i++) NSLog(@"[%d] %d", i, (int)cp[i]);
NSLog(@"wtf.value: %lu", wtf.value);
没问题。但说到真正的设备(iPhone4)

哦,天哪,发生了什么事?我用4294967295存储了wtf.value,但在设备上,它变为65535。 这个问题只会发生在设备上,而不会发生在模拟器上

在ios5xcode4.2之前,这个问题从未发生过


我怎样才能修好它?请帮帮我

我遇到过这样的问题,涉及浮点计算错误,但在UI定位代码中。我通过添加以下内容来修复它:

-mno-thumb
到生成设置下的“其他C标志”选项,仅适用于armv6设备(“添加生成设置”>“添加条件设置”)


我并不假装完全理解这里发生了什么,但是通过添加这个构建设置,您就禁用了Thumb指令集,根据一些()的说法,这并不推荐用于armv6构建。Thumb改变了浮点计算的工作方式。

我遇到过类似的问题,涉及浮点计算错误,但在UI定位代码中。我通过添加以下内容来修复它:

-mno-thumb
到生成设置下的“其他C标志”选项,仅适用于armv6设备(“添加生成设置”>“添加条件设置”)


我并不假装完全理解这里发生了什么,但是通过添加这个构建设置,您就禁用了Thumb指令集,根据一些()的说法,这并不推荐用于armv6构建。Thumb改变了浮点计算的工作方式。

根据同一个人(参考Craig的答案),也就是我,在ARM上处理未对齐的数据是非常糟糕的(模拟器是x86)。我可以理解网络代码中的整数(尽管我更愿意显式序列化),但应该没有理由不对齐浮点数(在这里,当您存储浮点数时,它似乎被静默地重新对齐到4字节边界,并覆盖部分wtf.value)。您没有通过网络传输原始浮点值,对吗?是吗?

根据同一个人(参考Craig的答案),也就是我,在ARM上处理未对齐的数据是非常糟糕的(模拟器是x86)。我可以理解网络代码中的整数(尽管我更愿意显式序列化),但应该没有理由不对齐浮点数(在这里,当您存储浮点数时,它似乎被静默地重新对齐到4字节边界,并覆盖部分wtf.value)。您没有通过网络传输原始浮点值,对吗?对吗?

乍一看,这似乎是一个bug。请向苹果提交错误报告。乍一看,这似乎是一个bug。请向苹果提交错误报告。
[0] 0
[1] 0
[2] 0
[3] 0
[4] 0
[5] 0
[6] 0
[7] 0
[8] 0
[9] 0
[10] -1
[11] -1
[12] 0
[13] 0
[14] 0
[15] 64
[16] -106
[17] -28
[18] 66
[19] 64
[20] 0
[21] 0
[22] 0
[23] 64
[24] -106
[25] -28
[26] 66
[27] 64
[28] 88
[29] 84
wtf.value: 65535
-mno-thumb