有什么好的办法可以将一个字节数组转换为字符串,用AfxMessageBox显示吗?谢谢

时间:2021-02-17 19:00:54
有什么好的办法可以将一个字节数组转换为字符串,用AfxMessageBox显示吗?在MFC或SDK中有这样的函数吗?或是给我一个例子代码。谢谢

17 个解决方案

#1


利用for循环吧,我想应该没什么好方法把

#2


循环体去吧

#3


void main()
{
BYTE arr[] = {'a','b','c','\0'};
char *p = (char *)arr;

cout<<p<<endl;
}

#4


循环吧

#5


循环提取吧

#6


不知道你是不是这个意思,那你只要
MessageBox(p);就可以了
void main()
{
BYTE arr[] = {'a','b','c','\0'};
char *p = (char *)arr;

cout<<p<<endl;
AfxMessageBox(p,0,0);
}

#7


to  mahongxi:
可是我的字节数组中定义的不是字符而是16进制码,那要怎样用AfxMessageBox()显示呢?用你上边的方法好象只能显示字符吧!
帮我想想有没有好的办法?

或者换句话说我要将一段内存里的数据显示出来。

#8


#include "stdlib.h"
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
进制的范围只能是2-36之间,你的字符串是用什么方式来表示就用相对应的进制。

#9


to : lblyy76
可i 是一个整型,而不是一个整型指针?

#10


用CString吧;

#11


这类问题最容易发生误解,就是俗语的"鸡同鸭讲".

楼主举个例子,然后大家再回答吧!
如:
BYTE bMyByte[]={ ........}
应该打印出
"xxxxxxx"

#12


哈哈,鸡先讲了

BYTE updata[]={0xFF,0x01,0x00,0x04,0x2F,0x00,0x34};
我想用AfxMessageBox(函数变换 updata)显示出FF,1,0,4,2F,0,34。

请指教!谢

#13


如果是单字节的,如ANSI编码的话,直接用MessageBox就可以了
如果是双字节的,例如wchar的,那么可以用SDK函数MultiByteToWideChar转一下
如果是其他的编码,那么自己写函数转吧^_^

#14


CString szA="",szB="";
for(int i=0;i<數組個數;i++)
{
  szB.Format(_T("%x"),updata[i]);
  if(i!=數組個數-1)  szB+=",";
  else szB+=".";   //:))
  szA+=szB;
}
AfxMessageBox(szA);

#15


to : YP2002CN(老婆我不敢了,老婆我愛你) 谢!
我爱老婆,可我没有:)

#16


YP2002正确。

我的方法是:
BYTE updata[]={0xFF,0x01,0x00,0x04,0x2F,0x00,0x34};
char* szMsg=new char [sizeof(update)/sizeof(BYTE)*2+1]
int j=0;
for (int i=0;i<sizeof(update)/sizeof(BYTE);i++)
  j+=sprintf(szMsg+j,"%X,",update[i]);

szMsg[j-1]='.'
MessageBox(NULL,szMsg,"Title",MB_OK);
delete []szMsg;

仅供参考,出错勿怪。

#17


谢谢大家,散分

#1


利用for循环吧,我想应该没什么好方法把

#2


循环体去吧

#3


void main()
{
BYTE arr[] = {'a','b','c','\0'};
char *p = (char *)arr;

cout<<p<<endl;
}

#4


循环吧

#5


循环提取吧

#6


不知道你是不是这个意思,那你只要
MessageBox(p);就可以了
void main()
{
BYTE arr[] = {'a','b','c','\0'};
char *p = (char *)arr;

cout<<p<<endl;
AfxMessageBox(p,0,0);
}

#7


to  mahongxi:
可是我的字节数组中定义的不是字符而是16进制码,那要怎样用AfxMessageBox()显示呢?用你上边的方法好象只能显示字符吧!
帮我想想有没有好的办法?

或者换句话说我要将一段内存里的数据显示出来。

#8


#include "stdlib.h"
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
进制的范围只能是2-36之间,你的字符串是用什么方式来表示就用相对应的进制。

#9


to : lblyy76
可i 是一个整型,而不是一个整型指针?

#10


用CString吧;

#11


这类问题最容易发生误解,就是俗语的"鸡同鸭讲".

楼主举个例子,然后大家再回答吧!
如:
BYTE bMyByte[]={ ........}
应该打印出
"xxxxxxx"

#12


哈哈,鸡先讲了

BYTE updata[]={0xFF,0x01,0x00,0x04,0x2F,0x00,0x34};
我想用AfxMessageBox(函数变换 updata)显示出FF,1,0,4,2F,0,34。

请指教!谢

#13


如果是单字节的,如ANSI编码的话,直接用MessageBox就可以了
如果是双字节的,例如wchar的,那么可以用SDK函数MultiByteToWideChar转一下
如果是其他的编码,那么自己写函数转吧^_^

#14


CString szA="",szB="";
for(int i=0;i<數組個數;i++)
{
  szB.Format(_T("%x"),updata[i]);
  if(i!=數組個數-1)  szB+=",";
  else szB+=".";   //:))
  szA+=szB;
}
AfxMessageBox(szA);

#15


to : YP2002CN(老婆我不敢了,老婆我愛你) 谢!
我爱老婆,可我没有:)

#16


YP2002正确。

我的方法是:
BYTE updata[]={0xFF,0x01,0x00,0x04,0x2F,0x00,0x34};
char* szMsg=new char [sizeof(update)/sizeof(BYTE)*2+1]
int j=0;
for (int i=0;i<sizeof(update)/sizeof(BYTE);i++)
  j+=sprintf(szMsg+j,"%X,",update[i]);

szMsg[j-1]='.'
MessageBox(NULL,szMsg,"Title",MB_OK);
delete []szMsg;

仅供参考,出错勿怪。

#17


谢谢大家,散分