На самом деле, я бы вообще не делал этого с произвольным вводом текста - было бы слишком сложно проверять правильность (будучи по сути ленивым). Если есть возможность ограничить то, что ваш пользователь может дать вам как можно раньше, вы должны принять это: -)
Я бы предоставил выпадающие списки для значений, каждый клочок, чтобы количество выбор не было слишком обременительным. Что-то вроде (и с извинениями за мои графические навыки):
+---+-+ +---+-+ +---+-+ +---+-+
Enter value 0x | 0 |V| | 0 |V| | 0 |V| | 4 |V|
+---+-+ +---+-+ +---+-+ +---+-+
|>0<|
| 1 |
| 1 |
| 2 |
| 3 |
: : :
| E |
| F |
+---+
Для значений в списке я бы назначил данные элемента от 0 до 15 включительно (для элементов от 0
до F
).
Таким образом, вы можете получить одно байтовое значение с чем-то вроде:
byte04 = listboxA.GetItemData(listboxA.GetCurSel()) * 16 +
listboxB.GetItemData(listboxB.GetCurSel());
byte05 = listboxC.GetItemData(listboxC.GetCurSel()) * 16 +
listboxD.GetItemData(listboxD.GetCurSel());
Если вы должны использовать менее строгий метод ввода, C ++ предоставляет:
int stoi (const string& str, size_t *idx = 0, int base = 10);
(и stol/stoul
для длинных со знаком и без знака), позволяющих преобразовывать строки C ++ в целочисленные типы.
Для ваших целей. вам, вероятно, придется обнаружить и убрать ведущий 0x
(вместе с, возможно, пробелами в начале / конце и т. д.), поэтому я предлагаю ограничительный маршрут как лучший вариант.