我在帶有Modbus的嵌入式系統上使用sqlite3。我需要將來自sqlite3的select語句結果的信息打包成一個短陣列,以便能夠通過Modbus。sqlite3將數據轉換爲短陣列
目前,我只使用來自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);
我考慮創建函數從無符號字符*(sqlite3_column_text的結果),以短陣和INT到短數組轉換。這是要走的路嗎?或者是否有正確的方法來即時投射這些結果?
此外,正在考慮使結構與sqlite3表類型相匹配,以便於複製,然後在最後有一個函數來運行每個結構成員,並在最後將其轉換爲一個shorts數組。
編輯:我剛剛看了一下結構中的工會,我認爲這將是正是我需要的:
typedef struct
{
union
{
unsigned char* unitSN;
short unitSNArr[4];
}
union
{
int unitClass;
short unitClassArr[1];
}
}UnitSettings;
它說,現在他們都看同一塊內存,但可以讀取它以不同的方式,這是我想要的。這比任何類型的轉換都容易得多?
現在決定......你有「短」還是「弦」? – 2013-06-18 16:33:41