开启左侧

halcon18.05 htuple string转换乱码问题

[复制链接]
weekend 发表于 2018-6-12 14:59:19 | 显示全部楼层 |阅读模式
在VC++中,采用sprintf(szBuffer,"%s",DecodedDataStrings[0].S()); 这样的方法打印字符串(内容全部是数字),出现乱码,该如何解决,有朋友知道的么?
Criss 发表于 2018-6-12 16:12:44 | 显示全部楼层
我刚刚测试了一下这个代码,结果是没有值的。不过经过系统分析,我找到了根本原因!VC++代码如下:
  1. HObject  ho_Image, ho_SymbolXLDs;
  2. HTuple  hv_DataCodeHandle, hv_ResultHandles, hv_DecodedDataStrings;

  3. ReadImage(&ho_Image, "1.png");
  4. CreateDataCode2dModel("QR Code", HTuple(), HTuple(), &hv_DataCodeHandle);
  5. FindDataCode2d(ho_Image, &ho_SymbolXLDs, hv_DataCodeHandle, HTuple(), HTuple(),&hv_ResultHandles, &hv_DecodedDataStrings);
复制代码
1.png
这里我测试生成的QR码,内容为:1234567890,经过楼主的方法DecodedDataStrings[0].S()并没有效果,于是分析如下:
HTuple中对字符串进行了改写,和以前的版本有些不一样了,所以可以看到.S()方法返回的数据是HString类型,声明如下:
  1.   HString S() const     { return (*this)[0].S(); }
复制代码
那么这个HString应该是Halcon内部的字符串类,那么肯定可以转我们标准C++类型的方法,继续查找找到下面方法:
  1. // Pointer to string data
  2.   const char* Text() const;
复制代码
哈哈,结果出来了,很简单就是这个方法了!赶紧修改原来的代码测试下:
  1. char* pChText = new char[255];
  2. memset(pChText, 0x00, 255);

  3. HString str = hv_DecodedDataStrings.S();
  4. sprintf_s(pChText, 255, "%s", str.Text());
复制代码

直接写也是可以的
  1. sprintf_s(pChText, 255, "%s", hv_DecodedDataStrings.S().Text());
复制代码


2.png
这回就可以成功进行赋值了!!!

提示:sprintf这个函数不是打印函数,是格式化字符串的函数,打印的是printf!


 楼主| weekend 发表于 2018-6-13 16:20:09 | 显示全部楼层
原来如此,果然搞定了,多谢多谢:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表