CString написал как неподписанный символ - PullRequest
0 голосов
/ 22 августа 2011

Я создаю приложение для чтения и записи в память микрочипа.

Мне нужно передать массив 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 во втором.

поэтому мой вопрос, как я могу перевести eacho этих входных данных на неподписанный символ, чтобы я мог установить его в своей переменной sRequest?

заранее спасибо (спасибо Дейву, ошибочные байты в битах, исправлены сейчас)

1 Ответ

0 голосов
/ 22 августа 2011

На самом деле, я бы вообще не делал этого с произвольным вводом текста - было бы слишком сложно проверять правильность (будучи по сути ленивым). Если есть возможность ограничить то, что ваш пользователь может дать вам как можно раньше, вы должны принять это: -)

Я бы предоставил выпадающие списки для значений, каждый клочок, чтобы количество выбор не было слишком обременительным. Что-то вроде (и с извинениями за мои графические навыки):

               +---+-+  +---+-+  +---+-+  +---+-+
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 (вместе с, возможно, пробелами в начале / конце и т. д.), поэтому я предлагаю ограничительный маршрут как лучший вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...