【问题标题】:QString to windows BYTEQString 到 windows BYTE
【发布时间】: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。我需要收集所有细节样本,将它们加载到内存中,并将新创建的细节模板与加载到内存中的每个模板匹配。

标签: c++ qt byte typedef


【解决方案1】:
QString str = "0x168de78"; //some info from the database

QByteArray tempB =  QByteArray::fromHex(str.toAscii());//or 
//QByteArray tempB =  str.toAscii().toHex();

BYTE *sequence = (BYTE*)strdup(tempB.data());

更新:如果你可以使用 STL

unsigned int value;   
std::stringstream ss;
ss << std::hex << "0x168de78";
ss >> x;

【讨论】:

  • 我测试了这两种方法,但都没有奏效。现在我用第一种方法在控制台上得到这个:0x16c49e0“hÞx”和第二种方法:0x145a168“307831363864653738”
  • 你能告诉我怎么做吗?您是否尝试从十六进制字符串转换为字节序列并且字节 1 应该是 0x78,字节 2 = 0xDE?
  • 好吧,我只是认为可以直接进行转换,不需要任何其他实用程序,显然不是。
  • 谢谢你的回答,我试过STL方法,效果很好。谢谢。
猜你喜欢
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多