在查询中SQLite Int到Hex和Hex到Int

时间:2013-01-11 23:13:55

标签: c++ visual-c++ sqlite

我有一些以INTEGER形式提供给我的数字数据。我将它与其他数据一起插入到SQLite中但是当我写出来时INTEGER数字需要是8位Hex带前导零的数字。

实施例

输入

400 
800 
25 
76

输出

00000190 
00000320 
00000019 
0000004C

最初我在阅读它们时正在转换它们并将它们存储为TEXT

stringstream temp;
temp << right << setw(8) << setfill('0') << hex << uppercase << VALUE;

但生活从来都不容易,现在我必须以INTEGER形式而不是HEX创建第二个输出。有没有办法在SQLite中将INTEGER个数字转换为HEXHEX个数字到INTEGERS

我想避免在SQLite之后使用C ++来更改数据,因为我编写了一些修改导出函数来获取查询结果并将它们打印到文件中。如果我在查询返回期间需要触摸数据,则无法使用它们。

我查看了SQLite中的HEX()函数,但没有得到预期的结果。我能做一个功能还是效率很低?我在一个非常大的数据集上这样做,所以应该避免任何昂贵的事情。

注意: 我在Visual Studios 2010中使用SQLites C / C ++接口。

3 个答案:

答案 0 :(得分:11)

您可以使用sqlite3 printf()函数:

CREATE TABLE T (V integer);
insert into T(V) values(400), (800), (25), (76);
select printf('%08X', V) from T;

答案 1 :(得分:2)

您可以使用sqlite3_create_function。查看example

答案 2 :(得分:1)

不是我最喜欢的答案我决定在表格中添加一个INTEGER值的列。

如果有人找到更好的方法,我会全力以赴。

修改

实现此答案并查看它对程序的影响后,这似乎是一种非常好的方法来获取数据而不会增加运行时负载。这个答案确实增加了数据库的大小,但它不需要任何额外的处理来从SQLite获取值,因为这只是抓取查询中的不同列。

另外,因为我开始使用这些值,所以这个答案通过将它们添加到表中并稍后处理来获得巨大成本节省,以便在程序的早期获取值。