我有一个IDC_Edit文本框设置,它将接受我想要转换为WORD的十六进制空格分隔值。我想让控件模仿数组,但我真的不确定如何完成转换。
基本上,如果我输入:
"12 AB"
我需要得到的WORD相等:
0x12AB
作为一个很少涉及C ++的人,更不用说WinAPI,我真的很难过如何做到这一点。我目前的代码是:
HWND hTextInput = GetDlgItem(hWnd, IDC_EDIT);
DWORD dwInputLength = Edit_GetTextLength(hTextInput);
char* resultString = new char[dwInputLength+1];
memset(hTextInput , 0, dwInputLength+1);
WORD result = (resultString[0] << 8) | resultString[1];
这会拉出IDC_EDIT
控件的文本和长度,并将其转换为char*
数组。然后尝试转换为WORD,但显然这只占前两个字符(12
)。
如何将此"12 AB"
拉入char*
数组[0x12, 0xAB]
(而不是["1", "2", "A", "B"]
),以便我可以将两个字节转换为WORD?
答案 0 :(得分:1)
试试这个:
WORD Readhex(const char *p)
{
char c ;
WORD result = 0 ;
while (c = *p++)
{
if (c >= '0' && c <= '9')
c -= '0' ;
else if (c >= 'A' && c <= 'F')
c -= 'A' - 10 ;
else if (c >= 'a' && c <= 'f')
c -= 'a' - 10 ;
else
continue ;
result = (result << 4) + c ;
}
return result ;
}
...
HWND hTextInput = GetDlgItem(hWnd, IDC_EDIT);
DWORD dwInputLength = Edit_GetTextLength(hTextInput);
char* resultString = new char[dwInputLength+1];
GetWindowText(hTextInput, resultString, dwInputLength+1) ;
WORD result = ReadHex(resultString) ;
你也忘记了GetWindowText;并且不需要用零(memset)填充缓冲区。 建议的strtol函数不适合您,因为strtol会将空间视为终止符。也许您还应该考虑进行一些错误检查,例如,如果用户输入垃圾。上面的ReadHex函数只是忽略任何非十六进制数字。