我在带有 Modbus 的嵌入式系统上使用 sqlite3。我需要将 sqlite3 的 select 语句结果中的信息打包到一个短裤数组中,以便能够通过 Modbus。
目前,我只使用来自 sqlite3 的 2 种数据类型(TEXT 和 INT)。我正在尝试将每列结果的结果打包成一个短裤数组。例如:
typedef struct
{
short unitSN[4];
short unitClass[1];
}UnitSettings;
UnitSettings unitSettings;
// prepare and execute select statement for table, then put into structs members
s = sqlite3_prepare(db, sqlstmt, strlen(sqlstmt), &stmt, &pzTest);
s = sqlite3_step( stmt );
// I want to do something like this:
unitSettings.unitSN[] = sqlite3_column_text(stmt, 0);
unitSettings.unitClass[] = sqlite3_column_int(stmt, 1);
我正在考虑创建函数以将 unsigned char* (sqlite3_column_text 的结果)转换为短数组并将 int 转换为短数组。这是解决问题的方法吗?或者是否有适当的方法可以即时投射这些结果?
此外,正在考虑使结构与 sqlite3 表类型匹配以便于复制,然后在最后,有一个函数来遍历每个结构成员并将其转换为最后的短裤数组。
编辑:我刚刚阅读了结构中的联合,我认为这正是我所需要的:
typedef struct
{
union
{
unsigned char* unitSN;
short unitSNArr[4];
}
union
{
int unitClass;
short unitClassArr[1];
}
}UnitSettings;
它说现在他们都在看同一块内存,但可以以不同的方式读取它,这就是我想要的。这比任何类型的转换都容易得多,对吧?