Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
1

Как преобразовать const char * в long в С++, 0xE0E040BF в long

09.04.2017, 20:03. Показов 6030. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста преобразовать текст в число на C++
C++
1
2
3
4
const char * value=cmd["value"];
long ircode =  atol(value);
USE_SERIAL.println(value); // выводит 0xE0E040BF
USE_SERIAL.println(ircode); // выводит 0
Как правильно это преобразовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 20:03
Ответы с готовыми решениями:

Как преобразовать char[8] к unsigned long long?
Требуется выполнить преобразование char к unsigned long long и обратно

Невозможно преобразовать 'const char [6]' в 'long'
Есть код: FILE *Protectdll; FILE *Coredll; FILE *Console; Protectdll =...

Вывод long как const char
Есть некоторое число типа long Есть функция DrawText(), принимающая const char Как преобразовать...

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в...

22
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
09.04.2017, 20:13 2
arbuzmaster, reinterpret_cast попробуй или сишный типа (int)
1
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 20:26 3
Что в value? Текст покажи.
0
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 20:57  [ТС] 4
nmcf
cmd["value"] - значение элемента JSON массива в нём 0xE0E040BF
_stanislav
C++
1
 long ircode =  reinterpret_cast<long>(value);// результат 1073687186 но не 0xE0E040BF
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 20:59 5
strtol() используй, и укажи там, что шестнадцатеричная система.
0
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 21:15  [ТС] 6
Может я что-то делаю не так?
C++
1
2
3
4
char * pEnd;
const char * value=cmd["value"];// здесь 0xE0E040BF
USE_SERIAL.println(value);// результат 0xE0E040BF
USE_SERIAL.println(strtol(value,&pEnd,16)); // результат 2147483647
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 21:24 7
Оно слишком большое. С диапазоном какая-то проблема. Замени на strtoul().
1
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
09.04.2017, 21:33 8
через поток
C++
1
2
3
std::istringstream iss("0xE0E040BF");
    unsigned num;
    iss >> std::hex >> num;
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 21:38  [ТС] 9
Походу все пропало!
C++
1
2
3
4
5
char * pEnd;
const char * value=cmd["value"];// здесь 0xE0E040BF
long ircode =  strtoul(value,&pEnd,16);
USE_SERIAL.println(value);// результат 0xE0E040BF
USE_SERIAL.println(strtoul(value,&pEnd,16));// результат 3772793023
Добавлено через 3 минуты
Цитата Сообщение от igorrr37 Посмотреть сообщение
через поток
C++Выделить код
C++
1
2
3
std::istringstream iss("0xE0E040BF");
unsigned num;
 iss >> std::hex >> num;
А как это в Arduino IDE запихнуть или вернее как это переделать под данную задачу?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 21:39 10
println() какой тип принимает? С точки зрения long твоё число отрицательное. Какой правильный результат?
0
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 21:45  [ТС] 11
В общем пришло число 0xE0E040BF в виде текста, нужно получить 0xE0E040BF в виде long , чтобы вставить его сюда
C++
1
irsend.sendSAMSUNG(0xE0E040BF, 32);
Вот, что должно получиться в итоге
C++
1
2
long ircode =  strtoul(value,&pEnd,16);
irsend.sendSAMSUNG(ircode, 32);
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 21:48 12
sendSAMSUNG() какой тип принимает? long, unsigned long или ещё какой-то?
0
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 21:51  [ТС] 13
C++
1
irsend.sendSAMSUNG(long, int);
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
09.04.2017, 21:51 14
Цитата Сообщение от arbuzmaster Посмотреть сообщение
преобразовать текст в число на C++
atol не умеет преобразовывать запись с префиксом 0x и т.п.
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 21:54  [ТС] 15
Извиняюсь, я ошибался
C++
1
void IRsend::sendSAMSUNG(unsigned long data, int nbits) {}
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 21:56 16
Лучший ответ Сообщение было отмечено arbuzmaster как решение

Решение

Ну тогда
C++
1
2
unsigned long ircode =  strtoul(value,&pEnd,16);
irsend.sendSAMSUNG(ircode, 32);
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
09.04.2017, 21:58 17
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
atol не умеет преобразовывать запись с префиксом 0x и т.п.
Если вам нужно конвертировать значения с именно и только с префиксом 0x, то пользуйтесь strtoul с базой 16.

Если вам нужно автоматически распознавать базу (по префиксу), то пользуйтесь strtoul с базой 0.
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 22:03  [ТС] 18
то есть, без разницы, что число будет преобразовано в десятичное?
C++
1
2
3
4
5
char * pEnd;
const char * value=cmd["value"];
unsigned long ircode =  strtoul(value,&pEnd,16);
USE_SERIAL.println(value);//0xE0E040BF
USE_SERIAL.println(ircode);//3772793023
Или это println его преобразует?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.04.2017, 22:05 19
Оно не будет десятичным. Ты его просто таким видишь после println().
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 15
09.04.2017, 22:08  [ТС] 20
Все кажись допер!
C++
1
USE_SERIAL.println(0xE0E040BF);//вывод 3772793023
0
09.04.2017, 22:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2017, 22:08
Помогаю со студенческими работами здесь

Как char[] перевести в битовую маску long long(64 бита) и наоборот?
Как char перевести в битовую маску long long(64 бита) и наоборот?

Как преобразовать long double в char[]?
Приветствую. Подскажите пожалуйста, как преобразовать long double в в тип char? До указателей по...

Перевести long long unsigned int в массив char
Подскажите, пожалуйста, как превратить число типа long long unsigned int в массив символов? Каждый...

Перевести большой массив char в long long
Здравствуйте. Есть массив char c 3145360828. Надо его в int перевести. Пробовал с atoi, вместо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru