Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 11:00   #1
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
Восклицание Перевод строки в HEX в DEC

Люди, как можно преобразовать строку в HEX типа char buf[]="F4A35" в десятичное число типа int=1002037 ?
Тоесть в исходной строке представлено HEX число без обозначений типа "0x" или "h", указывающих на то, что это HEX.
Грубо говоря подобное число легко вставить в калькулятор Windows в HEX режиме и нажать на кнопочку DEC и всё переведётся, но как быть без калькулятора? Или есть какие - нибуть исходники калькулятора Windows на с++ ? ;-))
FarStar вне форума Ответить с цитированием
Старый 07.06.2011, 11:11   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <cstdio>
#include <iostream>

using namespace std;

int main ()
{
  char sentence []="F4A35";
  int i;
  sscanf (sentence,"%x",&i);
  cout<<i;
  return 0;
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2011, 11:32   #3
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Спасибо! Чё то я об этом совсем забыл и пытался с CString ом сделать тоже самое....
Слушай, а вот как бы мне объединить две цифры типа int в одну?
Например, получаю я с контроллера так сказать два числа в HEX, перевожу их в int твоим способом. Эти числа - две составляющие одного, тоесть как бы старшая часть и младшая. Тоесть одно число надо совместить со вторым, чтоб получить искомое.
Вот к примеру: получаю я два числа с контроллера: int a=5, int b=345
Общее число должно выглядеть как - то так int c=ab, тоесть int c=5345
Можно ли так сказать отформатировать так число в int ?
FarStar вне форума Ответить с цитированием
Старый 07.06.2011, 11:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <cstdio>
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int HexToInt(char* str)
{
    int r;
    sscanf(str,"%x",&r);
    return r;
}

string ConcatInt(int f,int s)
{
    ostringstream st;
    st<<f<<s;
    return st.str();
}

int main ()
{
  char str[]="F4A35";
  string s;
  s=ConcatInt(HexToInt(str),HexToInt(str));
  cout<<s<<endl;
  return 0;
}
может не очень конечно, но работает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2011, 11:56   #5
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Но тут же объединяется строка,а не число типа int.
Строку то можно объединить и проще:
CString a1,a2,a3;
a1="PREVED ";
a2="MEDVED";
a3=a1+a2;
в итоге a3="PREVED MEDVED"; ;-))
А вот как объединить две цифры в одну.....
Ну вот другой пример:
int a1=5;
int a2=6;
Вот надо, чтоб int c=a1a2; тоесть int c=56; Тоесть тут не сложение идёт, а простое форматирование цифры, тоесть совмещения одной с другой в одну общую....
1.Так что, есть идеи какие - то по поводу выше сказанного?
2.Слушай, забыл ещё спросить, ты не в курсе, как без класса CString консольными способами получить из строки типа char buf[]="ABCDEF" последние, к примеру, 3 буквы? Тоесть получить "DEF" , ну и чтоб эти DEF тоже были в каком нибуть аналогичном формате типа char buf2[] ?
FarStar вне форума Ответить с цитированием
Старый 07.06.2011, 12:05   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
1.Так что, есть идеи какие - то по поводу выше сказанного?
учите основы ЭВМ, а именно то как хранятся цифры в памяти компьютера.
хотя, можно попробовать как то так:
Код:
int ConcatInt(int f,int s)
{
    int l=1,t=s;
    while(t>=10)
    {
        t/=10;
        l++;
    }
    for(int i=0;i<l;i++)f*=10;
    f+=s;
    return f;
}
но, не забывайте про ограничение размера числа.
Цитата:
2.Слушай, забыл ещё спросить, ты не в курсе, как без класса CString консольными способами получить из строки типа char buf[]="ABCDEF" последние, к примеру, 3 буквы? Тоесть получить "DEF" , ну и чтоб эти DEF тоже были в каком нибуть аналогичном формате типа char buf2[] ?
http://programmersforum.ru/showthread.php?t=155709
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2011, 12:12   #7
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

По поводу пункта 1, неужели нет какого нибуть простого оператора типа "&" или ещё какого - нибуть что просто объединить два числа в одно методом форматирования?
FarStar вне форума Ответить с цитированием
Старый 07.06.2011, 12:52   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я же сказал, изучите сначала двоичную систему счисления, и что вы в ней хотите связать?
Цитата:
простого оператора типа "&"
а причем тут оператор взятия адреса?(или объявления ссылки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2011, 13:19   #9
FarStar
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 21
По умолчанию

Вообщем я и сам до всего допёр, правда мой способ наверное на самый оптимальный ;-)):
int a=13; int b=45; int c;
CString aa;bb;cc;
aa.Format("%i",a);
bb=Format("%i",b);
cc=aa+bb;
sscanf(cc,"%i",c);
ВОТ И ВСЁ! ;-))
ну и далее
CString result;
result.Format("%i",cc);
AfxMessageBox(result,0,0);
FarStar вне форума Ответить с цитированием
Старый 07.06.2011, 13:23   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

по сути один в один что я предложил в посте 4.
просто я использую STL
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод числа из шестнадцатеричной(hex) в десятичную(dec) Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 15.11.2010 14:57
Перевод из dec в hex McDoC Помощь студентам 10 30.06.2010 09:03
Dec to Hex to Dec translator Alex Cones Софт 0 16.05.2010 20:05
HEX ->DEC 69_rus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.06.2007 20:44