【问题标题】:MFC: How to i convert DWORD and BYTE to LPCTSTR in order to display in MessageBoxMFC:如何将 DWORD 和 BYTE 转换为 LPCTSTR 以便在 MessageBox 中显示
【发布时间】:2009-10-16 08:52:23
【问题描述】:

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

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"));  

【问题讨论】:

  • 如果不知道数据是如何存储在这些数组中的,就无法回答这个问题。

标签: mfc byte messagebox dword


【解决方案1】:

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

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

MessageBox() 的 szTitleszText 参数需要 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);

将显示一个 MessageBox,其中包含类似“Geraet = 0x35”的消息。

【讨论】:

    【解决方案2】:

    如果 BYTE 必须为 1 字节,那么您必须(可选)使用 mbstowcs 将字节字符串转换为宽字符串。

    【讨论】:

      【解决方案3】:
      //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 这样的 soetming...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-21
        • 2011-04-12
        • 1970-01-01
        • 2011-03-29
        • 2012-12-14
        • 2011-11-03
        相关资源
        最近更新 更多