Sqlite3将数据转换成短数组
sqlite3 converting data into short array
我在Modbus嵌入式系统上使用sqlite3。我需要从sqlite3的选择语句结果打包的信息到一个数组的短裤,以便能够通过Modbus。
目前,我只使用2个数据类型从sqlite3 (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表类型,以便于复制,然后在结束时,有一个函数来运行每个结构体成员,并在结束时将其转换为一个数组。
EDIT:我刚刚读到结构体中的联合,我想这正是我需要的:
typedef struct
{
union
{
unsigned char* unitSN;
short unitSNArr[4];
}
union
{
int unitClass;
short unitClassArr[1];
}
}UnitSettings;
它说现在它们都在看同一块内存,但可以以不同的方式读取它,这正是我想要的。这比任何形式的转换都简单,对吧?
sqlite不会自动为您提供这些转换。你必须自己做转换。
我将只使用纯文本访问,然后编写自由函数来转换对短文本的访问。像这样的东西,我不确定什么样的界面对你的访问最有意义。
void read_short(const char* data, size_t index, short& val) {
val = *(reintepret_cast<short*>(&data[index*2]));
}
也许你的用例已经在短裤或其他东西的数组中使用了它们?我可能仍然只做一个短的每个字段,如果这实际上是你如何使用数据。
就我个人而言,如果你能帮助它,我会把它们作为整数输入数据库。您必须编写专门的工具来查看数据库值,这对于维护来说并不友好。
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值