| Автор |
Съобщение |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 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 |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
а проверил ли си char-а каква стойност има 
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Фев 10, 2009 2:40 pm |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Във всеки случай не 48 ...
|
| Вто Фев 10, 2009 3:17 pm |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Хе става бе
Ами каква е идеята с тази ф-я:
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 |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Ами аз точно това искам да правя.
Правя си едно приложение което получава команди от pc-то през USB-то(HID). Само че комуникацията е само в char формат, а пък аз немога да вникна изцяло в дефинирането на данните за да я променя и нямам много време, та като начало смятам да конвертирам от int в char и обратно. Така или иначе става въпрос за команди които са числа.
Тепърва навлизам в областа на указателите и пойнтерите, и теоретично смятам, че нещата са ми ясни, ама ми липсва практика. Докато си правих разни малки приложения си мислех, че C-то ми е напълно ясно. Като се сблъсках с по-мащабни неща обработващи разни масиви от данни, разбрах, че има много да уча.
|
| Вто Фев 10, 2009 3:50 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
На мен ми стана интересно как така бъзикаш USB-то, а не можеш да конвертираш прости неща. Ако имаш само един char, който е някакво число (от '0' до '9', което отговаря на 0х30 до 0х39) то тогава вместо да ползваш функции за преобразуване на стринг напиши следното просто нещо: i = char-0x30, което автоматично ти дава десетичното число, което е представено с ASCII кода си в променливата char. Винаги съм се чудил защо някои хора вместо първо да размигат един светодиод се хвърлят с главата напред направо в бетонната стена (USB-то)  .
|
| Вто Фев 10, 2009 5:45 pm |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Ами когато стойността на числото е от 0 до 100?
Аз това и правя размигвам светодиоди през USB-то, само че имам доста пропуски.
В крайна сметка темата е в раздел Академия.
А по отношение на интереса ти как бъзикам USB - с готов сорс, който само променям само че вече нямя нищо общо с оригинала си и все още работи 
|
| Вто Фев 10, 2009 6:22 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Вместо да философстваш за целенето и кое как се наваксва, първо вземи почети малко  . Когато почваш да се учиш директно на сложните неща и пропускаш необходими стъпала има опастност изведнъж да се изправиш пред няколко и то сериозни проблема, които да те откажат от заниманието или пък да похабиш повече време от колко ако беше почнал по "нормалния" начин  . От темата ти става ясно, че на теб ти липсват основни неща като типове данни и как се конвертират данни от един в друг тип. Сори ама USB-то съм абсолютно убеден, че в момента ти е една голяма черна кутия  .
Няма как да имаш число представено с ASCII в char и да е по-голямо от 9. За да можеш да ползваш функцията atoi за стринг, който съдържа числото 100 ти трябват 4 байта, не само един char, които да имат следното съдаржание: 0x31 0x30 0x30 0x00 и тогава да дадеш на функцията като параметър поинтера към първия байт със стойност 0х31. А и байтовете трябва да са един след друг  .
|
| Вто Фев 10, 2009 6:30 pm |
|
 |
|
perro_iv
Ранг: Новодошъл
Регистриран на: Вто Авг 23, 2005 10:36 am Мнения: 156 Местоположение: Казанлък
|
Първо тука не обсъждаме как работи USB-то!
Второ попитах съвсем елементарни неща на които хората ми отговориха и си реших проблема!
Трето благодаря за изчерпателния отговор!
|
| Вто Фев 10, 2009 6:39 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Супер, щом си решил проблема, но недей да разглеждаш темата като средство за решение само на твоя проблем, въпреки, че ти си и автора. Възможно е да я прочетат поне още 10 човека и те да искат да знаят какъв е правилния път, а не да повтарят чужди грешки  . Точно затова и раздела се казва "Академия", а не "Решения на конкретни проблеми". Както и да е де - стана ясно вече за какво си говорим  .
|
| Вто Фев 10, 2009 7:27 pm |
|
 |
|
3aek
Ранг: Форумен бог
Регистриран на: Вто Яну 10, 2006 2:40 pm Мнения: 2258
|
господ да благослови Майкрочип и техните FAE които ни дават кодове които не разбираме а модифицираме, а после се чудим защо електрониката не работи
|
| Вто Фев 10, 2009 7:51 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: Въпрос относно конвертиране
|
| Вто Фев 10, 2009 8:41 pm |
|
 |
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 10:24 pm Мнения: 105
|
c&=0x0f;
 ))) , за десетични цифри представени в ascii код.
|
| Вто Фев 10, 2009 10:09 pm |
|
|