• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 710
  • Last Modified:

Copy Hex from String

Hello

I have 6 Edit controls in which the user enters a hex value (for example the string "00" in edit 1 "e1" in edit 2 etc)

      UCHAR szDestMac[6] = {NULL}; //This is the varaible in which I want to store all my hex numbers

                //I get the text from the edit box as follows
                TCHAR m_szDestMAC[3];
      GetDlgItemText(IDC_EDIT_SRCMAC1, m_szDestMAC, sizeof(m_szDestMAC));
               
                //So now m_szDestMAC = "00" and I want to copy this as a hex number into the first byte of my unicode array, szDestMac[0].

                //I tried both the following
      swprintf((TCHAR*)&szDestMac[0], _T("%s"), m_szDestMAC);
      //memcpy(&szDestMac[0], m_szDestMAC, 1);

                //But the TRACE statment returns as "Got Source MAC from user: 30"
      TRACE(_T("Got Source MAC from user: %02x\n"), szDestMac[0]);

Anyone know why szDestMac[0] contains the value 30 instead of what was typed in the edit control "00" and how to resolve the problem

Regards
 
0
auk_ie
Asked:
auk_ie
  • 2
  • 2
3 Solutions
 
chensuCommented:
0x30 is the ASCII value of character '0'. If you want to print out the character,

TRACE(_T("Got Source MAC from user: %c\n"), szDestMac[0]);
0
 
jkrCommented:
Try

swprintf((TCHAR*)&szDestMac[0], _T("%S"), m_szDestMAC);  // note the capital 'S'

Are you sure you don't want to use sth. like

UCHAR szDestMac[7] = {0,0,0,0,0,0,0};

<loop from 0 to 6>
    TCHAR m_szDestMAC[3];
    GetDlgItemText(IDC_EDIT_SRCMAC1, m_szDestMAC, sizeof(m_szDestMAC));
    wchar_t wszTmp  [3];
    wsprintf ( wszTmp, "%S", m_szDestMac);
    wcscat ( szDestMac, wszTmp);
<end loop>





0
 
brettmjohnsonCommented:
swprintf() is not what you want you use as this point.
You want to use strtol() instead:

szDestMac[0] = (UCHAR) strtol(m_szDestMAC);


0
 
chensuCommented:
The code should be like this,

TCHAR szDestMac[6] = { 0 };

TCHAR m_szDestMAC[3];
GetDlgItemText(IDC_EDIT_SRCMAC1, m_szDestMAC, sizeof(m_szDestMAC) / sizeof(TCHAR));
               
_stprintf(szDestMac, _T("%s"), m_szDestMAC);

TRACE(_T("Got Source MAC from user: %c\n"), szDestMac[0]);

Note that the MFC documentation on CWnd::GetDlgItemText() is wrong.

"nMaxCount
Specifies the maximum length (in bytes) of the string to be copied to lpStr. If the string is longer than nMaxCount, it is truncated."

It should be in characters rather than bytes.
0
 
brettmjohnsonCommented:
> szDestMac[0] = (UCHAR) strtol(m_szDestMAC);

Oops, my bad.  that should be:

szDestMac[0] = (UCHAR) strtol(m_szDestMAC, NULL, 16);

0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now