MFC:如何将DWORD和BYTE转换为LPCTSTR以便在MessageBox中显示

时间:2009-10-16 08:52:23

标签: mfc byte messagebox dword

我正在使用VS2005“使用Unicode字符集”选项

typedef unsigned char       BYTE;  
typedef unsigned long       DWORD;

BYTE       m_bGeraet[0xFF];
DWORD      m_dwAdresse[0xFF];

如何使代码有效?

MessageBox (m_bGeraet[0], _T("Display Content"));  
MessageBox (m_dwAdresse[0], _T("Display Content"));  

3 个答案:

答案 0 :(得分:2)

看起来您可能需要一些C语言本身的帮助,我建议您在C上找到一本与Windows编程无关的初学者书。

MessageBox()只显示C风格的字符串,这些字符串是char类型的数组,其中包含一个ASCII值为0的字符。这个零字符是NUL字符,据说这些字符串是“NUL终止”或“零终止”。打印字符串时仅显示NUL之前的字符,或者在连接字符串时复制。但是,如果数组中没有NUL字符,则字符串未正确终止并且尝试显示它可能导致崩溃,或者显示“垃圾”,如:“我可以喝啤酒吗?# BT&安培; I10)AAX?

MessageBox()的 szTitle szText 参数期望char *是指向此类字符串的指针。

如果您尝试传递BYTE而不是char *,则BYTE的值将被错误地视为地址。 MessageBox()将尝试以BYTE的“指定”值访问内存,并且将发生访问冲突。

此问题的一个解决方案是分配char类型的缓冲区并使用snprintf_s将数据值转录为字符串表示形式。

例如:

  

char output_buffer [1024];

     

snprintf_s(output_buffer,dimensionof(output_buffer),“Geraet = 0x%02X”,m_bGeraet [i]);
  MessageBox(hwnd_parent,output_buffer,“来自我的消息:”,MB_OK);

会显示一个消息框,其消息读取的内容类似于“Geraet = 0x35”。

答案 1 :(得分:0)

如果BYTE是1字节必不可少,则必须(可选)使用mbstowcs将字节字符串转换为宽字符串。

答案 2 :(得分:0)

//easy way for bytes is to do this

CString sTemp;

sTemp.Format("my byte = %d", bySomeVal);

MessageBox(sTemp);

//for a DWORD try

sTemp.Format("Dword is %lu", dwSomeVal);

MessageBox(sTemp);

如果你使用MessageBox,我会建议像AfxMessageBox一样... ...