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

Другие вопросы по тегам