Форум программистов, компьютерный форум CyberForum.ru

вычислить int из char* - C++

Восстановить пароль Регистрация
 
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
23.10.2012, 15:52     вычислить int из char* #1
Есть массив из char, в нем в 16 ричном виде записаны цифры, например a2, 01

Надо получить число в 10 виде. В данном случае будет 418 (01A2 (перевернуты)) Как это сделать ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13951 / 8782 / 1221
Регистрация: 24.12.2010
Сообщений: 15,891
23.10.2012, 16:09     вычислить int из char* #2
Как-то так
C
1
2
3
4
5
6
7
8
x = 0;
for(i=0; i<n; i++) {
   j = (i%2) ? i-1 : i+1;
   x *= 16;
   c = m[j];  // Очередной символ
   if ('9' >= c && c >='0') x += c - '0';
   else if ('a' <=c && c<='f') x += 10 + c - 'a';
}
Предполагается, что кол-во цифр (n) - четное
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
23.10.2012, 16:18  [ТС]     вычислить int из char* #3
нет, как то не работает. значение может быть и такое "1e 00 00 00"
Байт
 Аватар для Байт
13951 / 8782 / 1221
Регистрация: 24.12.2010
Сообщений: 15,891
23.10.2012, 16:29     вычислить int из char* #4
Извините, не доглядел, вот эта строчка
C
1
j = (i%2) ? i-1 : i+1;
должна выглядеть так
C
1
j = ((i%4) <2) ? i+2 : i-2;
Но вообще - это идея, те способ перевода символов цифр в число, а уж детали, связанные с перевертыванием, вы сами уточните.

Добавлено через 1 минуту
Цитата Сообщение от admsasha Посмотреть сообщение
"1e 00 00 00"
= 1E0000 (16) - я правильно понял?
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
23.10.2012, 16:36  [ТС]     вычислить int из char* #5
Цитата Сообщение от Байт Посмотреть сообщение
= 1E0000 (16) - я правильно понял?
нет, это будет 0000001E = 30
Байт
 Аватар для Байт
13951 / 8782 / 1221
Регистрация: 24.12.2010
Сообщений: 15,891
23.10.2012, 16:39     вычислить int из char* #6
Цитата Сообщение от admsasha Посмотреть сообщение
нет, это будет 0000001E = 30
Тогда все еще проще. Попробуйте сами. А то получается, что это я учусь.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.10.2012, 06:27     вычислить int из char* #7
Цитата Сообщение от admsasha Посмотреть сообщение
Есть массив из char, в нем в 16 ричном виде записаны цифры, например a2, 01

Надо получить число в 10 виде. В данном случае будет 418 (01A2 (перевернуты)) Как это сделать ?
Надо получить именно строку в десятичной записи числа, или перевести из шестнадцатеричной в обычный int, то есть во внутреннее представление? Во втором случае тебе нужна одна из этих функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <math.h>
unsigned int HexToInt(char *hex)
{
 int result;
 char *c;
 char *n;
 for (c=hex, result=0; *c!=0; c=n)
 {
  if ((c>='0')&&(c<='9'))
  {
   result+=((int)c)-((int)'0');
  }
  if ((c>='a')&&(c<='f'))
  {
   result+=((int)c)-((int)'a')+10;
  }
  if ((c>='A')&&(c<='F'))
  {
   result+=((int)c)-((int)'A')+10;
  }
  n=c+1;
  if (*n!=0)
  {
   result*=10;
  }
 }
 return result;
}
char *IntToDec(unsigned int Dec)
{
 char *result;
 char *c;
 unsigned int n;
 if (Dec==0)
 {
  n=1;
 }
 else
 {
  n=(int)(ln((double)Dec)/ln(10.0))+1;
 }
 result=new char [n];
 c=result+n-1;
 if (result)
 {
  do
  {
   *c=Dec%10;
   --c;
  } while (Dec!=0)
 }
 return result;
}
, иначе обе.

Добавлено через 13 часов 22 минуты
Слегка переврал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <math.h>
unsigned int HexToInt(char *hex)
{
 int result;
 char *c;
 char *n;
 for (c=hex, result=0; *c!=0; c=n)
 {
  if ((c>='0')&&(c<='9'))
  {
   result+=((int)c)-((int)'0');
  }
  if ((c>='a')&&(c<='f'))
  {
   result+=((int)c)-((int)'a')+10;
  }
  if ((c>='A')&&(c<='F'))
  {
   result+=((int)c)-((int)'A')+10;
  }
  n=c+1;
  if (*n!=0)
  {
   result*=16;
  }
 }
 return result;
}
char *IntToDec(unsigned int Dec)
{
 char *result;
 char *c;
 unsigned int n;
 if (Dec==0)
 {
  n=1;
 }
 else
 {
  n=(int)(ln((double)Dec)/ln(10.0))+1;
 }
 result=new char [n];
 c=result+n-1;
 if (result)
 {
  do
  {
   *c=(char)(Dec%10+((int)'0'));
   --c;
  } while (Dec!=0)
 }
 return result;
}
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
24.10.2012, 07:10  [ТС]     вычислить int из char* #8
например
char count[5];

count[0]=0xa2;
count[1]=0x01;
count[2]='\0';
count[3]='\0';

ответ должен быть: 418 (01A2)
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
24.10.2012, 07:27     вычислить int из char* #9
Цитата Сообщение от admsasha Посмотреть сообщение
Есть массив из char, в нем в 16 ричном виде записаны цифры, например a2, 01
Надо получить число в 10 виде. В данном случае будет 418 (01A2 (перевернуты)) Как это сделать ?
а никак не делать все данные лежат в памяти как массив байт просто приведи к тому виду какой тебе нужен
например
C++
1
2
3
4
5
6
unsigned char d[4];
d[0]=0xa2;
d[1]=0x01;
d[3]=d[2]=0;
int *b=(int*)d;
int k=*b;
если хочешь красиво
то для этого есть объединения
например можешь создать так
C++
1
2
3
4
5
6
enum bla
{
 unsigned char  b[4];
 unsigned short s[2];
 unsigned int    i;
}
bla.b обращение как массиву байтов
bla.s как к массиву коротких
bla.i как к целому
данные в памяти одни и те же а обращение к ним по разному
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
24.10.2012, 07:39  [ТС]     вычислить int из char* #10
код, не компилируется...

test.cpp:9: ошибка: ISO C++ не поддерживает сравнение между указателем и целым
test.cpp:9: ошибка: ISO C++ не поддерживает сравнение между указателем и целым
test.cpp:13: ошибка: ISO C++ не поддерживает сравнение между указателем и целым
test.cpp:13: ошибка: ISO C++ не поддерживает сравнение между указателем и целым
test.cpp:17: ошибка: ISO C++ не поддерживает сравнение между указателем и целым
test.cpp:17: ошибка: ISO C++ не поддерживает сравнение между указателем и целым


9 if ((c>='0')&&(c<='9'))
13 if ((c>='a')&&(c<='f'))
17 if ((c>='A')&&(c<='F'))

Добавлено через 9 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
unsigned char d[4];
d[0]=0xa2;
d[1]=0x01;
d[3]=d[2]=0;
int *b=(int*)d;
int k=*b;
Работает То что и надо было. Спасибо!
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 09:05     вычислить int из char* #11
atoi?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 09:13     вычислить int из char*
Еще ссылки по теме:

C++ Подскажите пожалуйста с int main(int argc, char*argv[])
C++ Как в выделенную память записать поочередно число int, массив char[n], и еще число int
C++ [BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)'

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

Или воспользуйтесь поиском по форуму:
admsasha
12 / 12 / 4
Регистрация: 11.06.2011
Сообщений: 199
24.10.2012, 09:13  [ТС]     вычислить int из char* #12
Цитата Сообщение от Kgfq Посмотреть сообщение
atoi?
Нет, это совсем не то.
Yandex
Объявления
24.10.2012, 09:13     вычислить int из char*
Ответ Создать тему
Опции темы

Текущее время: 01:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru