CAFAudioDescription成员类型和endian-ness

时间:2013-10-23 10:23:42

标签: objective-c c core-audio endianness

CAFAudioDescription的{​​{1}}成员是mSampleRate类型,但要为其分配类似44100.0的值,我需要先将其转换为big-endian。函数Float64返回CFConvertFloat64HostToSwapped CFSwappedFloat64,而不是uint64_t

为什么返回int类型?我甚至无法将其转换为Float64

Float64

2 个答案:

答案 0 :(得分:1)

我只是Objective-C的初学者,我没有使用过这个API,但是:

uint64_t只是64位的东西。然而,存储在这64位中的内容不是整数,而是转换后的Float64。它没有Float64类型,因为它不是一个Float64,而是一个转换的 Float64。

答案 1 :(得分:1)

当您更改字节序时,该值不再适用于托管系统。它只是一堆。

没有理由不能将这些位存储到任何可以容纳64位的类型,甚至是Float64

但是,字节顺序交换通常通过位移和屏蔽完成,并且由于无符号整数类型最适合作业(您不能使用浮点数),因此位模式可能已分配给uint64_t操作。

您可以在操作后将位移回浮点类型,但这将是额外的步骤,无论如何值都没有意义。

有符号整数转换不必首先转换为无符号整数,因为位操作可以使用它们。尽管如此,对于API一致性这样做会很好,因为交换有符号整数上的数值也没有意义。