Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
1

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

23.10.2012, 15:52. Показов 1537. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть массив из char, в нем в 16 ричном виде записаны цифры, например a2, 01

Надо получить число в 10 виде. В данном случае будет 418 (01A2 (перевернуты)) Как это сделать ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2012, 15:52
Ответы с готовыми решениями:

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо...

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому...

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn ...

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc>1 то...

11
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
23.10.2012, 16:09 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) - четное
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
23.10.2012, 16:18  [ТС] 3
нет, как то не работает. значение может быть и такое "1e 00 00 00"
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
23.10.2012, 16:29 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) - я правильно понял?
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
23.10.2012, 16:36  [ТС] 5
Цитата Сообщение от Байт Посмотреть сообщение
= 1E0000 (16) - я правильно понял?
нет, это будет 0000001E = 30
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
23.10.2012, 16:39 6
Цитата Сообщение от admsasha Посмотреть сообщение
нет, это будет 0000001E = 30
Тогда все еще проще. Попробуйте сами. А то получается, что это я учусь.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.10.2012, 06:27 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;
}
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
24.10.2012, 07:10  [ТС] 8
например
char count[5];

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

ответ должен быть: 418 (01A2)
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
24.10.2012, 07:27 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 как к целому
данные в памяти одни и те же а обращение к ним по разному
1
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
24.10.2012, 07:39  [ТС] 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;
Работает То что и надо было. Спасибо!
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
24.10.2012, 09:05 11
atoi?
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
24.10.2012, 09:13  [ТС] 12
Цитата Сообщение от Kgfq Посмотреть сообщение
atoi?
Нет, это совсем не то.
0
24.10.2012, 09:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2012, 09:13
Помогаю со студенческими работами здесь

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char -...

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*)
Написать программу, которая считывает текст из файла и выводит на экран только строки,...

конвертирование (char)int (char*)int
Вопрос такой каким образом можно выполнить вот такую операцию: у нас есть: int c = 12; char...

int main(int argc, char* argv[]) ?
Зачем нужны аргументы (int argc, char* argv) для функции main() и обязательно ли их писать?


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

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