+ -
当前位置:首页 → 问答吧 → 一个简单的问题

一个简单的问题

时间:2011-11-30

来源:互联网


CString str = "002b0001";
int nSize = str.GetLength();
char *pAnsiString = new char[nSize+1];
wcstombs(pAnsiString,str,nSize+1);
unsigned char szBuff[100] = {0};
for(int i=0;i<strlen(pAnsiString);i++)
sscanf(pAnsiString+2*i,"%2x",szBuff+i);

我想把这段代码定制成函数 返回 unsigned char[] ,如何做函数啊 
我写成 unsigned char[] GetChar(){ } 编译不通过啊

作者: winlmh123   发布时间: 2011-11-30

unsigned char[] GetChar(){ }

有你这样搞的吗?

unsigned char * GetChar() {}

作者: icechenbing   发布时间: 2011-11-30

void AAA(char *str1 ,char *str2);
这种形式,传递str字符串进去,str2输出

作者: agoago_2009   发布时间: 2011-11-30

可是传指针进去 执行出来结果不对啊

作者: winlmh123   发布时间: 2011-11-30

显示错误 错误 4 error C2440: “return”: 无法从“unsigned char (*)[500]”转换为“unsigned char *” e:\c++\wtl\kuitset\kuitset\convert.h 18 KuiTset

作者: winlmh123   发布时间: 2011-11-30

引用 4 楼 winlmh123 的回复:
显示错误 错误 4 error C2440: “return”: 无法从“unsigned char (*)[500]”转换为“unsigned char *” e:\c++\wtl\kuitset\kuitset\convert.h 18 KuiTset


你用的是二维数组吧。

unsigned char arr[10][100];

return arr[0];//类似这样返回

作者: mingliang1212   发布时间: 2011-11-30

求各个大哥们写个能用的示例 实在是弄不出来啊

作者: winlmh123   发布时间: 2011-11-30

unsC/C++ code
igned char* GetChar()
{
    CString str = "002b0001";
    int nSize = str.GetLength();
    char *pAnsiString = new char[nSize+1];
    wcstombs(pAnsiString,str,nSize+1);
    unsigned char* szBuff = new unsigned char[100];
    memset(szBuff, 0, sizeof(unsigned char)*100);
    for(int i=0;i<strlen(pAnsiString);i++)
        sscanf(pAnsiString+2*i,"%2x",szBuff+i);
    return szBuff;
}

作者: jptaozhantaozhan   发布时间: 2011-11-30

这玩意你还是自己写吧,别用sscanf了,太脑残了。

作者: qq120848369   发布时间: 2011-11-30

我建议你像2L说的那样写。return什么的返回是否成功就可以了。不然你在函数里面动态创建字符串,(静态是不可能的,因为函数结束他就释放了)谁来负责释放(delete)?
任何时候不要把内存管理推给客户代码来实现。

作者: tianhan4   发布时间: 2011-11-30

C/C++ code

void  func(CString str,unsigned char * strout)  //若用int返回,返回是否成功。长度是否够用不讨论。
{
int nSize = str.GetLength();
char *pAnsiString = new char[nSize+1];
wcstombs(pAnsiString,str,nSize+1);
unsigned char szBuff[100] = {0}; 
for(int i=0;i<strlen(pAnsiString);i++)
sscanf(pAnsiString+2*i,"%2x",szBuff+i);
delete pAnsiString;
strout=&szBuff;
}


没运行过不知道对否,大概就是这个意思。

作者: tianhan4   发布时间: 2011-11-30

额。后半段写脑残了 重写
code=C/C++]
void func(CString str,unsigned char * strout) //若用int返回,返回是否成功。长度是否够用不讨论。
{
int nSize = str.GetLength();
char *pAnsiString = new char[nSize+1];
wcstombs(pAnsiString,str,nSize+1);
for(int i=0;i<strlen(pAnsiString);i++)
sscanf(pAnsiString+2*i,"%2x",strout+i);
delete pAnsiString;
}



[/code]

作者: tianhan4   发布时间: 2011-11-30