Получение значения из строкового элемента и добавление полученного значения с двойным числом git - PullRequest
0 голосов
/ 24 января 2020

Я хочу взять значение из строки, а затем сложить взятое значение с двойным ди git число:

uint8_t buff[] = "Test123";
uint8_t result = 0;
result = buff[5] + 12;

Если я попытаюсь сложить взятое значение с одиночным ди git (0, 1,2, .., 9) все в порядке, но если я хочу добавить взятое значение с двойным числом git (10,11,12,13, ..., 99), я получаю код результата ASCII , Как я могу решить эту проблему? Приведение не стоило того.

Я ожидаю результата 14, но получил 62. Так что запрограммируйте добавление ASCII-значения строки с 12, но я хочу добавить целое значение buff [5] с 12, я хочу этот результат = 12 + 2 = 14

1 Ответ

1 голос
/ 24 января 2020

Причина, по которой вы получаете 62, заключается в том, что вы добавляете десятичное значение символа ASCII 2 вместо его целочисленного представления.

Чтобы преобразовать символ в целое число, мы бы вместо этого

result = (buf[5] - '0') + 12;               /* first way */

result = ((uint8_t)(buf[5] & 0x0F)) + 12;   /* second way */

Первый способ: десятичное значение ASCII символа 2 равно 50, а символа 0 равно 48 => '2' - '0' = 2

Второй способ: шестнадцатеричные значения символов от 0 до 9 равны [0x30, 0x31, ..., 0x39]. Мы можем видеть, что первый полубайт соответствует целочисленному представлению символа, что означает, что мы можем отключить верхний полубайт его шестнадцатеричного значения.

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