Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
1

Не могу найти ошибку в функции перевода строк в 16-ричную СС

01.09.2014, 23:39. Просмотров 1462. Ответов 35
Метки нет (Все метки)

Привет, есть функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void calc(int num,int base)
{
 
    if (num == 0)
        return;
    int rem = num % base;
    if (rem <= 9)
        {
            calc(num/base,base);
            cout << rem;
        }
    else
        {
            calc(num/base,base);
            cout << char(rem - 10 + 'A');
        }
}
Первый параметр это то что будем переводить в 16-ричную СС, второй в какую СС
Пишу:
C++
1
calc('Hello', 16);
Но мне выдает
Код
65 6C 6C 6F
Но должно быть:
Код
48 65 6C 6C 6F
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2014, 23:39
Ответы с готовыми решениями:

Не могу найти ошибку в функции
не могу найти ошибку, помогите очень срочно надо. вот код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Не могу найти ошибку в функции
Доброго времени суток.Помогите дописать программу Вычислить и вывести на экран в виде таблицы...

Не могу найти ошибку в функции
Всем привет! ) Вот функция, она удаляет (вырезает) совпадения в строках Memo2 ну и в Столбце...

Функция перевода из 10-ричной СС в 80-ричную СС
Здравствуйте, как реализовать функцию перевода из 10-ричной СС, в 80-ричную СС ? подход перевода...

35
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
01.09.2014, 23:43 2
Цитата Сообщение от tdo22 Посмотреть сообщение
C++
1
calc('Hello', 16);
Разве 'Hello' -- это int? У вас функция определена, как void calc(int num,int base).
Кого и куда вы хотите перевести?

Конвертация ' string hex ' to char -- вот тут со строками по разному извращаются, посмотрите, может поможет.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
01.09.2014, 23:47  [ТС] 3
вместо 'Hello' передадутся цифры.
C++
1
2
    int i = 'Hello';
    cout << i << endl;
Я вроде понял в чем проблема:
если написать
C++
1
calc('Helo', 16);
то будет все верно:
C++
1
48 65 6c 6f
наверно ошибка из за того, что в слове "Hello" две буквы 'l'
как это можно исправить ?
0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
01.09.2014, 23:53 4
Цитата Сообщение от tdo22 Посмотреть сообщение
вместо 'Hello' передадутся цифры.
Это компилятор GCC так конвертирует 'Hello' в int 0x656C6C6F, причем берет только четыре последних символа. Вы не заметили, что вам в лог компиляции предупреждения кидаются? VC++ это вообще не будет компилировать.

Цитата Сообщение от tdo22 Посмотреть сообщение
Если написать:
А тут все верно, тип char свободно расширяется до int
0
4454 / 2072 / 263
Регистрация: 01.03.2013
Сообщений: 5,508
Записей в блоге: 22
01.09.2014, 23:55 5
Цитата Сообщение от tdo22 Посмотреть сообщение
наверно ошибка из за того, что в слове "Hello" две буквы 'l'
Нет.
Цитата Сообщение от tdo22 Посмотреть сообщение
как это можно исправить ?
Посмотреть, сколько хеллов влезет в сигнед инт.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
01.09.2014, 23:57  [ТС] 6
Да, действительно.
Варнинг не заметил:
warning: character constant too long for its type [enabled by default]
как можно переписать эту функцию для роботы с символами ?
но чтоб можно было само указывать в какую СС переводить (второй параметр)
ну и чтоб потом обратно в начальный вид
0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
02.09.2014, 00:02 7
Цитата Сообщение от tdo22 Посмотреть сообщение
как можно переписать эту функцию для роботы с символами ?
Еще раз, что и куда вы хотите перевести?
Тема у вас называется "Не могу найти ошибку в функции перевода строк в 16-ричную СС", т.е. речь как бы идет о строках, а функция, которую вы показали, со строками не работает, она работает с int'ами?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
02.09.2014, 00:04  [ТС] 8
Эта функция работает со строками, если не вылазить за приделы int-а
я просто забыл что в int не засунуть такое большое число, по этому и не влазит слово 'Hello'
Как ее можно исправить чтоб работать с символами которые могут быть длинными ?
0
_Ivana
02.09.2014, 00:08
  #9

Не по теме:

Послежу за темой, думаю дождусь когда ТС доработает свою рекурсивную функцию с передачей строк по значению с двойным вызовом для каждого символа всей строки, чтобы ххееееллллллллоооооооооооооооо по всему стеку размазалось...

0
tdo22
02.09.2014, 00:10  [ТС]
  #10

Не по теме:

функцию на форуме нашел, и работает кстати она нормально если не вылазить за int

0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
02.09.2014, 00:13 11
Цитата Сообщение от tdo22 Посмотреть сообщение
Эта функция работает со строками, если не вылазить за приделы int-а
Еще раз:
'Hello' -- это не строка.
void calc(int num,int base) -- эта функция работает с int.

Цитата Сообщение от tdo22 Посмотреть сообщение
Как ее можно исправить чтоб работать с символами которые могут быть длинными ?
Какими символами? Оказывается есть длинные и короткие символы? Ну ка, просветите.

Можно написать функцию, которая будет работать со строками. Не вижу особых проблем.

Цитата Сообщение от tdo22 Посмотреть сообщение
функцию на форуме нашел, и работает кстати она нормально если не вылазить за int
Ну так она с int и работает. Что не так? Хотите строку перевести в какое-то представление, пишите функцию для работы со строками, хотите числа в какой-нибудь системе счисления представлять, вот ваша функция этим и занимается.
0
1127 / 786 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
02.09.2014, 00:13 12
Цитата Сообщение от tdo22 Посмотреть сообщение
исправить чтоб работать с символами которые могут быть длинными
Вместо int можно использовать массив:
C++
1
void calc( char[], int )
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
02.09.2014, 00:16  [ТС] 13
Да, извиняюсь не правильно выразился.
void calc(int num,int base) -- эта функция работает с int.
C++
1
2
int i = 'One';
cout << i << endl;
i будет равно 5205605
в чем проблема то ?
0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
02.09.2014, 00:20 14
Цитата Сообщение от tdo22 Посмотреть сообщение
в чем проблема то ?
"У матросов нет вопросов, у големов нет проблемов"

Проблемы у вас, т.к. вы хотите сами не знаете чего.

Цитата Сообщение от tdo22 Посмотреть сообщение
int i = 'One';
'Оne' -- это не строка. Посмотрите название вашей темы.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
02.09.2014, 00:25  [ТС] 15
ок, это я понял уже давно
Да, извиняюсь не правильно выразился.
мне нужно написать функцию, чтоб переводить в 16-ричную СС символы
Пример:
]1\i43-╪3yF4n[iL
HelloWorld!
но чтоб можно было указывать вторым параметром в какую СС
как ее можно написать ?
0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
02.09.2014, 00:29 16
Цитата Сообщение от tdo22 Посмотреть сообщение
но чтоб можно было указывать вторым параметром в какую СС
Покажите вывод такой функции для строки "hello world", ну, к примеру, для троичной и 18-ричной СС.

Цитата Сообщение от tdo22 Посмотреть сообщение
]1\i43-╪3yF4n[iL
Что это за фигня?
0
Эксперт PHP
4417 / 3600 / 1512
Регистрация: 24.04.2014
Сообщений: 10,628
02.09.2014, 00:32 17
tdo22, тебе нужно вывести коды всех символов 16 системе?
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
 
int main() {
    char hello[] = "Hello";
    for (int i=0; i < strlen(hello); ++i) {
        printf("%2x", hello[i]); 
    }
    return 0;
}
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
02.09.2014, 00:37  [ТС] 18
Что это за фигня?
символы из ASCII.
Слово one 3 и 18 СС
3:
Код
111202000111111
18:
Код
3FA36D
Добавлено через 3 минуты
Jewbacabra, да, что-то типа этого.
Но как указать чтоб буквы были верхнего регистра ?
0
Эксперт PHP
4417 / 3600 / 1512
Регистрация: 24.04.2014
Сообщений: 10,628
02.09.2014, 00:43 19
Цитата Сообщение от tdo22 Посмотреть сообщение
Но как указать чтоб буквы были верхнего регистра ?
C++
1
printf("%2X", hello[i]);
1
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 775
02.09.2014, 01:02  [ТС] 20
Ночь, голова не варит а решения так просто:
C++
1
2
3
4
5
6
    
char str[] = "Hello";
for(int i = 0; i < strlen(str); i++)
    {
        calc(str[i], 16);
    }
и функция прекрасно переведет в 16-ричную СС
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2014, 01:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевода числа из 10 в 8-ричную систему счисления
Написать программу перевода числа из 10 в 8-ричную систему счисления Вот эту помогите еще)) И...

Не могу найти ошибку в процессе минимизации функции
Добрый день. Помогите пожалуйста. Нужно минимизировать функцию с помощью карты Карно. Сначала по...

Табуляция функции (цикл for), не могу найти ошибку
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() {...

В функции обратной матрицы, не могу найти ошибку
У меня есть программа для нахождения обратной матрицы написанная на Dev C++. #include &lt;iostream&gt;...

Программа перевода числа в 8-ричную систему счисления
Ребят ,помогите ,пожалуйста Нужно сделать программу перевода положительного целого числа в...

Программа перевода из 6-ричной системы счисления в 12-ричную
Помогите сделать РГР! Надо чтобы выводилась сначала базовая система,потом десятичная...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.