【发布时间】:2016-05-11 08:00:56
【问题描述】:
我正在尝试找到一种通用方法来使用参数值初始化数组或结构。当从数组或结构中使用参数时,我的函数将知道上下文,因此它将知道如何正确使用这些值。
要初始化数组/结构,我想做这样的事情:
const void *para[] = { // General Purpose store for parameters
"1234", // Store string pointer
(void *)1234, // Store integer value
(void *)12.34f, // Store float value
};
字符串和整数参数类型都可以。浮点数不起作用,因为编译器没有将浮点数转换为 void 指针的方法。
我需要一种将浮点值转换为二进制表示的方法,以便可以将其视为 32 位无符号整数。这个可以吗?
我可以用 memcpy() 的蛮力解决这个问题,但这需要删除“const”。最终目标是将代码移植到具有有限 SRAM 的嵌入式 ARM 系统,因此数组/结构需要位于 ROM 中,因此需要由编译器初始化,而不是在运行时初始化。
【问题讨论】:
-
您不应将
void *用作通用值类型。您的memcpy也可以工作:您的const适用于指向的内存,而不适用于para的元素。 -
没有办法获得浮点literal的二进制表示。文字没有表示,只有对象(变量)有。
-
union的(数组)是否适合您的需求? -
尝试复合文字 (c11):使用
float和void*的联合,而不是(void *)12.34f。类似((union { float f; void *p}){12.34f}).p.