我有一个程序在将它们存储在SQLITE3数据库中时读取32位无符号整数值,然后检索它们,但在某些地方,数据丢失了。
// The data is captured off the wire
//Stored and printed as a 32-bit number
int32_t seq_num = ntohl(tcp->th_seq); // tcp->th_seq is the number
printf("Seq Num: %" PRIu32 "\n", seq_num);
// Function delcaration (variable as 32bit int)
void addPacket(int table, char *srcIP, char *dstIP, int port, int32_t seq_num);
// Function called with 32bit sequence number
addPacket(0, result1, result2, ntohs(tcp->th_dport), seq_num);
这是SQLITE创建数据库语句:
sql1 = "CREATE TABLE synpackets (" \
"id INTEGER PRIMARY KEY AUTOINCREMENT," \
"srcIP VARCHAR(64)," \
"dstIP VARCHAR(64)," \
"dstPort int(4)," \
"seq int(64)," \ // Could this be the problem?
"timestamp DATETIME DEFAULT CURRENT_TIMESTAMP);";
这是我在INSERT语句中绑定参数的方式:
sqlite3_bind_int64(stmt, 4, seq_num);
当我读回SELECT * ...
后的数字时,我得到一些负数而不是我打算进入的值:
这是原始捕获,因为它之前发生进入数据库:
Packet number 38:
Seq Num: 1118349056
Packet number 39:
Seq Num: 768809646
这是相同的数据包,但 之后从数据库中检索到了
id = 1
seq = 1118349056
id = 2
seq = -1752457962
我已经查看了负数的数据库文件正在写入表中,因此它不仅仅是打印错误。当我尝试将32位数字插入数据库时似乎出现了问题,但我不确定是什么。