【发布时间】:2012-12-13 12:33:56
【问题描述】:
我有一个 BYTE 类型,它在 windows.h 标头中定义如下:
typedef unsigned char BYTE;
然后我在数据库中有一些字段,我将它们作为 QString 获取并将它们转换为 QByteArray。
目前我有:
QString str = "0x168de78"; //some info from the database
QByteArray tempB = QByteArray::fromHex(str.toAscii().toHex());
BYTE *sequence = (BYTE*)strdup(tempB.data());
在这种情况下,“0x168de78”代表我期望从数据库中获取的信息样本。
我需要将 QString 从字面上转换为 BYTE,以便以后使用它。
如果我告诉应用程序给我 sequence 和 tempB.data() 的值,我会得到类似的东西:
0x867dc8 "0x168de78"
0x867de0 "0x168de78"
0x867df8 "0x168de78"
所以 tempB.data() 没问题,但序列不是。我做错了什么?
【问题讨论】:
-
BYTE *sequence = new BYTE[400]; - 这是内存泄漏,因为 strdup 将分配一个新的 STRING。为什么需要数据副本?
-
你到底想做什么?你打算如何使用“序列”?您实际上是在尝试将“str”转换为 32 位整数吗?
-
@neagoegab Thgank 你,我更正了那部分代码。
-
@Pete 该字符串是从指纹读取器中提取的细节信息。库中提取、匹配、校验等功能均依赖于BYTE。我需要收集所有细节样本,将它们加载到内存中,并将新创建的细节模板与加载到内存中的每个模板匹配。