ASCII --> int
- Войдите на сайт для отправки комментариев
Ср, 27/12/2017 - 23:35
Здраствуйте. Потребовалось вытаскивать ASCII символы из уарта и переводить их в обычные числа (Общение с частотником). Строка имеет следующий вид [EOT 14 STX 2A19 0003 ETX]. Ну понятно что адрес инвертора, номер параметра и значение. И что бы переводить значения частот в int написал функцию. Правильно ли она написана?
unsigned int Str_to_Int(unsigned char* Str1, unsigned char Frst_Val, unsigned char Lst_Val)
{
unsigned char temp_buff[5] = {0};
unsigned char i;
for(i = Frst_Val; i <= Lst_Val; i++)
{
if((Str1[i] >= 'A') && (Str1[i] <= 'F'))
{
temp_buff[(i - Frst_Val)] = Str1[i] - 55;
}
else if((Str1[i] >= '0') && (Str1[i] <= '9'))
{
temp_buff[(i - Frst_Val)] = Str1[i] - 48;
}
}
return ((temp_buff[0] << 12) | (temp_buff[1] << 8) | (temp_buff[2] << 4) | (temp_buff[3]));
}
Похвально, конечно, но есть способ проще: int x = atoi(&buffer[n]), где n - позиция, с которой в строке начинается ваше число. Правда, эта функция должна поймать \0 в конце строки, но думаю, что вы этот впрос решите.
Похвально, конечно, но есть способ проще: int x = atoi(&buffer[n]), где n - позиция, с которой в строке начинается ваше число. Правда, эта функция должна поймать \0 в конце строки, но думаю, что вы этот впрос решите.
Все как всегда оказывается намного проще. Обязательно попробую ваше решение.
Идеологически правильно из этой строки [EOT 14 STX 2A19 0003 ETX]. получить это int argc, char* argv[] a потом уже извлекать все остальное.http://cppstudio.com/post/421/
Прочитав описание функции atoi, пришел к выводу что она скорее всего не подойдет, так как частота задается от 0000 до FFFF, тогда как atoi обрабатывает только числовые знаки игнорируя буквы
Вам сложно угодить. Почитайте про http://www.cplusplus.com/reference/cstdlib/strtol/
А вы в курсе что 0x1234= ((1*16+2)*16+3)*16+4 Легко написать конвертер самому
пс 0x1234= ((1<<4+2)<<4+3)<<4+4