CString написал как неподписанный символ
Я создаю приложение для чтения и записи в память микрочипа.
Мне нужно передать массив unsigned char, который имеет 4 фиксированных байта и 2 переменных байта, так что я хочу прочитать банк памяти 0004 Я передам
unsigned char sRequest[32]={0};
sRequest[0] = 0x02; //FIXED
sRequest[1] = 0x1F; //FIXED
sRequest[2] = 0x0A; //FIXED
sRequest[3] = 0x20; //FIXED
sRequest[4] = 0x00; //VARIABLE
sRequest[5] = 0x04; //VARIABLE
Я хочу поставить 2 поля CEdit, чтобы пользователь мог ввести этот банк переменной памяти, поэтому он будет писать 0x00 в первом CEdit и 0x04 во втором.
поэтому мой вопрос, как я могу перевести каждый из этих входных данных на неподписанный символ, чтобы я мог установить его в моей переменной sRequest?
спасибо заранее (спасибо Дэйв, опечатаны байты в биты, исправлено)
1 ответ
На самом деле, я бы не стал делать это с произвольным вводом текста - это было бы слишком сложно для проверки (будучи по сути ленивым). Если есть возможность ограничить то, что ваш пользователь может дать вам как можно раньше, вы должны принять это:-)
Я бы предоставил выпадающие списки для значений, каждый кусочек, чтобы количество, из которого можно выбирать, не было слишком обременительным. Что-то вроде (и с извинениями за мои графические навыки):
+---+-+ +---+-+ +---+-+ +---+-+
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
(вместе с возможными пробелами в начале / в конце и т. д.), поэтому я предлагаю ограничительный маршрут как лучший вариант.