Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща
Въпрос относно конвертиране 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Въпрос относно конвертиране
Искам една char стойност да я конвертирам в int.
Правя следното
int p;
p=atoi(char);
и p си стои винаги 0;
Нещо явно не вдявам?
Става въпрос за PIC18F4550.


Вто Фев 10, 2009 2:20 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
char ch;
int p;

p=(int)ch;


Вто Фев 10, 2009 2:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение 
а проверил ли си char-а каква стойност има :)

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Вто Фев 10, 2009 2:40 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
MYXATA написа:
а проверил ли си char-а каква стойност има :)

Във всеки случай не 48 ...


Вто Фев 10, 2009 3:17 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Ники написа:
char ch;
int p;

p=(int)ch;


Хе става бе :)
Ами каква е идеята с тази ф-я:

atoi Convert a string to a 16-bit signed integer.
int atoi( const char * s );
Return Value: 16-bit signed integer for all strings in the range (-32768 to 32767).

И защо не мога да я подкарам. Нещо бъркам типовете явно?


Вто Фев 10, 2009 3:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Не става щото atoi иска като параметър указател към char, пък ти му подаваш копие на самия char.

По правилно е да надраскаш: p=atoi(&char).

Ама горното въпреки че е ЩО ГОДЕ правилно "граматически" всъщност е голяма глупост. Идеята на тая функция е да преобразува от ASCII символи на число в самото число.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Фев 10, 2009 3:27 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Цецо написа:
Не става щото atoi иска като параметър указател към char, пък ти му подаваш копие на самия char.

По правилно е да надраскаш: p=atoi(&char).

Ама горното въпреки че е ЩО ГОДЕ правилно "граматически" всъщност е голяма глупост. Идеята на тая функция е да преобразува от ASCII символи на число в самото число.


Ами аз точно това искам да правя.
Правя си едно приложение което получава команди от pc-то през USB-то(HID). Само че комуникацията е само в char формат, а пък аз немога да вникна изцяло в дефинирането на данните за да я променя и нямам много време, та като начало смятам да конвертирам от int в char и обратно. Така или иначе става въпрос за команди които са числа.

Тепърва навлизам в областа на указателите и пойнтерите, и теоретично смятам, че нещата са ми ясни, ама ми липсва практика. Докато си правих разни малки приложения си мислех, че C-то ми е напълно ясно. Като се сблъсках с по-мащабни неща обработващи разни масиви от данни, разбрах, че има много да уча.


Вто Фев 10, 2009 3:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
На мен ми стана интересно как така бъзикаш USB-то, а не можеш да конвертираш прости неща. Ако имаш само един char, който е някакво число (от '0' до '9', което отговаря на 0х30 до 0х39) то тогава вместо да ползваш функции за преобразуване на стринг напиши следното просто нещо: i = char-0x30, което автоматично ти дава десетичното число, което е представено с ASCII кода си в променливата char. Винаги съм се чудил защо някои хора вместо първо да размигат един светодиод се хвърлят с главата напред направо в бетонната стена (USB-то) :D .


Вто Фев 10, 2009 5:45 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Dimitar написа:
На мен ми стана интересно как така бъзикаш USB-то, а не можеш да конвертираш прости неща. Ако имаш само един char, който е някакво число (от '0' до '9', което отговаря на 0х30 до 0х39) то тогава вместо да ползваш функции за преобразуване на стринг напиши следното просто нещо: i = char-0x30, което автоматично ти дава десетичното число, което е представено с ASCII кода си в променливата char. Винаги съм се чудил защо някои хора вместо първо да размигат един светодиод се хвърлят с главата напред направо в бетонната стена (USB-то) :D .


Ами когато стойността на числото е от 0 до 100?

Аз това и правя размигвам светодиоди през USB-то, само че имам доста пропуски.
В крайна сметка темата е в раздел Академия.

А по отношение на интереса ти как бъзикам USB - с готов сорс, който само променям само че вече нямя нищо общо с оригинала си и все още работи :wink:


Вто Фев 10, 2009 6:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Вместо да философстваш за целенето и кое как се наваксва, първо вземи почети малко :) . Когато почваш да се учиш директно на сложните неща и пропускаш необходими стъпала има опастност изведнъж да се изправиш пред няколко и то сериозни проблема, които да те откажат от заниманието или пък да похабиш повече време от колко ако беше почнал по "нормалния" начин 8) . От темата ти става ясно, че на теб ти липсват основни неща като типове данни и как се конвертират данни от един в друг тип. Сори ама USB-то съм абсолютно убеден, че в момента ти е една голяма черна кутия :) .
Цитат:
Ами когато стойността на числото е от 0 до 100?

Няма как да имаш число представено с ASCII в char и да е по-голямо от 9. За да можеш да ползваш функцията atoi за стринг, който съдържа числото 100 ти трябват 4 байта, не само един char, които да имат следното съдаржание: 0x31 0x30 0x30 0x00 и тогава да дадеш на функцията като параметър поинтера към първия байт със стойност 0х31. А и байтовете трябва да са един след друг :D .


Вто Фев 10, 2009 6:30 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Първо тука не обсъждаме как работи USB-то!
Второ попитах съвсем елементарни неща на които хората ми отговориха и си реших проблема!
Трето благодаря за изчерпателния отговор!


Вто Фев 10, 2009 6:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Супер, щом си решил проблема, но недей да разглеждаш темата като средство за решение само на твоя проблем, въпреки, че ти си и автора. Възможно е да я прочетат поне още 10 човека и те да искат да знаят какъв е правилния път, а не да повтарят чужди грешки 8) . Точно затова и раздела се казва "Академия", а не "Решения на конкретни проблеми". Както и да е де - стана ясно вече за какво си говорим :D .


Вто Фев 10, 2009 7:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Яну 10, 2006 2:40 pm
Мнения: 2258
Мнение 
господ да благослови Майкрочип и техните FAE които ни дават кодове които не разбираме а модифицираме, а после се чудим защо електрониката не работи


Вто Фев 10, 2009 7:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: Въпрос относно конвертиране
perro_iv написа:
Искам една char стойност да я конвертирам в int.
Правя следното
int p;
p=atoi(char);
и p си стои винаги 0;
Нещо явно не вдявам?
Става въпрос за PIC18F4550.


p = c - '0';


Вто Фев 10, 2009 8:41 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение 
c&=0x0f;

:)))) , за десетични цифри представени в ascii код.


Вто Фев 10, 2009 10:09 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 17 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни