Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. else res+=(int*)hex[i]*pow(16,k-i-1);--что то эта строка не работает. Или не так привожу типы или else надо как то иначе употребить. С буквами в шестнадцятиричном виде работает на отлично-например-0хFFFF Модератор: Используйте тег SRC для оформления исходника ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 03:38 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
В (int*)hex[i]*pow(16,k-i-1);---(int*)--эта часть лишняя просто разные варианты испытывал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 03:40 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
#include <iostream> #include <string.h> #include <math.h> using namespace std; int hexdec (char * hex) { int k=strlen(hex); int i; int res=0; for (i=2;i<k;i++) {if (hex[i]=='F') res+=15*pow(16,k-i-1); else if (hex[i]=='E') res+=14*pow(16,k-i-1); else if (hex[i]=='D') res+=13*pow(16,k-i-1); else if (hex[i]=='C') res+=12*pow(16,k-i-1); else if (hex[i]=='B') res+=11*pow(16,k-i-1); else if (hex[i]=='A') res+=10*pow(16,k-i-1); else if (hex[i]>=0 && hex[i]<=9) res+=hex[i]*pow(16,k-i-1);// не читает цыфры числа только буквы-то есть что то с приведением типов } return res;} int main() { cout << hexdec("0x1F")<< endl; return 0; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 04:12 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 05:45 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
m_Sla, Слева направо намного проще, понятнее и быстрее :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 10:55 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Там речь идет о элементах масива чар. Что достаточно будет hех[i]-'0'. Это не одиночный символ. Потом там коэф.=1 и 16. Там кроме того не одна буква А а А..F. Кроме того важена степень с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 12:51 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut, Стесняюсь спросить. Русский ваш не родной язык? Сложно понять о чем вы пытаетесь спросить. Может как-то на пальцах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 12:59 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut, Правильно. Вот это может не сработать: Код: plaintext 1. Для надежности надо писать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 13:01 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyСлева направо намного проще, понятнее и быстрее :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Не возьмет 0x stut Код: plaintext 1. stut, предлагаю самому понять как работает алгоритм Anatoly Moskovsky Немного подскажу: 1. Считается так 3B97 = (((3 * 16 + 11) * 16 + 9) *16 + 7 2. res <<= 4; это умножить на 16 3. сам допили чтоб 0x не обрабатывалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 13:16 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyДля надежности надо писать так: Нельзя так же забывать о флуктуациях в шине, поэтому не все операции присваивания проходят с первого раза. Для надежности добавляется простая проверка: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 13:17 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Dima TНе возьмет 0x По большому счету должен быть еще один уровень вызова, который по префиксу определяет что вызвать: hexdec, octdec, decdec.... и выдавать ошибку если префикс неверный. Иначе что слева что справа парсить строку - все равно будет всякий мусор неверно интерпретировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 13:48 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Все фигня, Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 14:54 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutelse if (hex[i]>=0 && hex[i]<=9) res+=hex[i]*pow(16,k-i-1);// не читает цыфры числа только буквы-то есть что то с Ты чё, так нельзя... '0' на самом деле равен сорока восьми, а '9' - пятидесяти семи... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 15:11 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
?Ты чё, так нельзя... '0' на самом деле равен сорока восьми, а '9' - пятидесяти семи... :)Причем самое смешное, что это вовсе не шутка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 15:13 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Да. Символ ноль '0' имеет шестнадцатиричный код 0x30 в кодировке ASCII или 48 в десятичной системе. Этим можно пользоваться. Но для символов старше 0x7f это опасно т.к. мы уходим в национальные кодировки которые могут на экране выглядеть одниаково но иметь разные коды (прим: 1251,koi-8,cp866). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2014, 16:02 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Да проблема уже давно решилась. res+=hex[i]*pow..надо заменить на hex[i]-'0' и все работает. Что то даже очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2014, 19:23 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Точнее хекс-итэ надо заменить, а перед пов поставить 16. А я то думал почему там такие большие числа получаются а '2' считалось 50, например. Очень хорошая прога получилась. Может надо тему переименовать: как перевести число из 16 в 10-чную систему исчисления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2014, 19:40 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutМожет надо тему переименовать: как перевести число из 16 в 10-чную систему исчисления. Лучше назвать "как не надо переводить" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2014, 22:57 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, в смысле, а что не работает? Или это принцип такой. Я бы здесь не публиковал и не старался сделать свою если бы в нете была готовая. И работающая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 12:44 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutв смысле, а что не работает? вызов pow() в конверторе счисления - это пример того как не надо делать. Даже если "работает" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 13:05 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut, тебе же уже указали на strtok - она делает ровно то, что ты хотел. почему этот вариант не использовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 13:47 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Анатолий Широковstrtok strtol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 14:09 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Strlok-не использовал эту команду никогда. И при чем она здесь. Я вот что хотел узнать что значит цикл. Первые два параметра: for (;*ptr;++ptr)-то есть пока есть указатель на строку. Ну а начальный параметр, где цикл начинается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 16:05 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut где цикл начинается? где-то выше по коду Код: plaintext 1. В примере передается в параметрах Anatoly Moskovsky Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 16:28 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut for (;*ptr;++ptr)-то есть пока есть указатель на строку. т.е. пока *ptr != 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 16:30 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut, ты решил написать свою функцию, поскольку не знал о существовании СТАНДАРТНОЙ функции strtol. это понятно. теперь тебе говорят, что есть стандартная функция http://www.cplusplus.com/reference/cstdlib/strtol/ и ты спрашиваешь при чем здесь она? конечно же не причем, но все же на будущее надо использовать стандартные средства и уже после использоваться "колхоз", если только ты не ставишь своей целью обучение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 17:09 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
вот вопрос в тему: как написать функцию atoi перевода строчного числа в int? Если отнимать '0' то понятно. А если без этого. В нете есть один пример таких функции только там реверс идет? Для чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 06:48 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutвот вопрос в тему: как написать функцию atoi перевода строчного числа в int? Если отнимать '0' то понятно. А если без этого. В нете есть один пример таких функции только там реверс идет? Для чего? Любая функция в итоге сведется к тому что надо отнимать '0'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 06:56 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
http://stackoverflow.com/questions/5710091/how-does-atoi-function-in-c-work--здесь вот другой пример. Но я так понимаю что надо найти первую цыфру или знак (минус). Потом если минус-то занести в переменную сайн. Потом заносить цыфры в масив целых чисел. Если после конца встречается пробел то закончить формирование масива. А потом масив цыфр определя его длину уже превратить в десятичное число. Это мое понимание создание собственной итои-функции без использование указателей? Не знаю насколько это эфективно-ибо наверное надо выделять динамическую память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 19:52 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutнаверное надо выделять динамическую память? тут надо дополнительный поток создать, выполнять в нем это преобразование и через мьютекс проверять окончание расчета. Шутка. Там тоже самый алгоритм что и выше перевод из 16ричной, только вначале дополнительно добавлена проверка знака + или - ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 20:00 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutвот вопрос в тему: как написать функцию atoi перевода строчного числа в int? Если отнимать '0' то понятно. А если без этого. В нете есть один пример таких функции только там реверс идет? Для чего? Вот мы в школе на уроках информатики первой темой изучали преобразования систем счисления. Алгоритм стандартый. Без вариантов. Что ты хочешь получить от atoi - непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 20:12 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Да было у меня такое задание для написание собственной атои-функции--только это не задание на школьном уроке, и даже на универс. занятие. Конечно ничего сложного. Но если использовать стандартную функцию что переводит масив символов в целое долгое то вообще будет просто. Но когда всречаешся впервую с этим не знаеш к чему это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 23:03 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stut http://stackoverflow.com/questions/5710091/how-does-atoi-function-in-c-work--здесь вот другой пример. Но я так понимаю что надо найти первую цыфру или знак (минус). Потом если минус-то занести в переменную сайн. Потом заносить цыфры в масив целых чисел. Если после конца встречается пробел то закончить формирование масива. А потом масив цыфр определя его длину уже превратить в десятичное число. Это мое понимание создание собственной итои-функции без использование указателей? Не знаю насколько это эфективно-ибо наверное надо выделять динамическую память? Где ты там увидел выделение динамической памяти? Тебе на вход пришёл указатель на строку. Память уже до тебя выделена. Ты должен вернуть атомарный тип. short, int, long e.t.c. Это всё - работа со стеком. Никаких операций malloc, new не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 01:38 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
stutНо когда всречаешся впервую с этим не знаеш к чему это. Надо учиться отлаживать код. Непонимаешь как работает - навтыкай вывод на экран и смотри пошагово что происходит. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Сначала так, потом пользоваться отладчиком научишься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 06:29 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
Dima TСначала так, потом пользоваться отладчиком научишься.Я бы сказал наоборот. Сначала то можно и с отладчиком баловаться, а на серьезных проектах отладочный вывод - единственно возможная вещь. Так что если научиться вести логи с младенчества - много потом себе нервов сохранишь и времени выиграешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 07:28 |
|
||
|
Как правильно привести тип в функции конвертации системы исчисления
|
|||
|---|---|---|---|
|
#18+
У меня чаще были ситуации когда не было возможности вообще использовать отладчик. Нужно было разбираться в коде, которые писал не я и не было исходников. Имеешь чёрный ящик. И думаешь. Медитируешь как оно внутри. Иногда (Oracle/PLSQL) тебе не дают привелегий (grant debug) на сервере. Тоже приходися изворачиваться. STDOUT там тоже нет. Выводишь в таблицы. Потом анализ. Иногда задача еще сложнее. Перформанс. Тоже нет возможности профилятор включать. Нет привилегий. Создаю систему кумулятивных счётчиков-переменных которые просто считают входы-выходы в code-blocks. Потом анализ. Иногда это вообще единственный способ детектировать факт оверхеда (функция в предложении WHERE....). И бох ее знает сколько раз она должна дёрнуться. По логике - десяток раз. По факту (так оптимизатор решил) - миллионы раз. Вобщем дебаггер, ребята - это самые комфортные и тепличные условия. Пользуйтесь дебаггером пока есть возможность. Пока не наступила война.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:33 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019667]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 296ms |
| total: | 469ms |

| 0 / 0 |
