yidie
驱动牛犊
驱动牛犊
  • 注册日期2007-06-30
  • 最后登录2008-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:2174回复:2

中间带NULL字符的BSTR怎么处理

楼主#
更多 发布于:2008-03-26 17:10
#include "stdafx.h"
#include "atlbase.h"
#include   <stdio.h>  
int   main(int argc, char* argv[])
{
    OLECHAR temp[5];  
    temp[0]='A';  
    temp[1]=0;  
    temp[2]='D';
    temp[3]='E';
    temp[4]='F';

    BSTR bstrText = SysAllocStringLen(temp,   5);

    int a = SysStringLen(bstrText)+1;

    char *ansistr = new char[a];

    memset(ansistr,0,a);

    ::WideCharToMultiByte(CP_ACP,
        0,
        bstrText,
         -1,
        ansistr,
        a,
        NULL,
        NULL);

    for(int i=0;i<a;i++)
        printf("%.2lx ",ansistr);

    printf("\n");

    SysFreeString(bstrText);

    return 0;  
}

显示结果是
41 00 00 00 00 00
而不是
41 00 44 45 46 00
要怎么做才能得到后面的结果?
用心去创造,什么事都是小菜一碟!
weiwangchenw
驱动牛犊
驱动牛犊
  • 注册日期2008-03-20
  • 最后登录2009-11-09
  • 粉丝3
  • 关注0
  • 积分7分
  • 威望53点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-21 16:36
for(int i=0;i<a;i++)
        printf("%.2lx ",ansistr);
这对了吗?
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-05-23 13:34
printf等函数是通过\0来判断字符串结束的。如果要打印中间带有\0的字符串,需要当作两个字符串来打印
游客

返回顶部