Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос относно конвертиране
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6538
Страница 1 от 2

Автор:  perro_iv [ Вто Фев 10, 2009 2:20 pm ]
Заглавие:  Въпрос относно конвертиране

Искам една char стойност да я конвертирам в int.
Правя следното
int p;
p=atoi(char);
и p си стои винаги 0;
Нещо явно не вдявам?
Става въпрос за PIC18F4550.

Автор:  Ники [ Вто Фев 10, 2009 2:39 pm ]
Заглавие: 

char ch;
int p;

p=(int)ch;

Автор:  MYXATA [ Вто Фев 10, 2009 2:40 pm ]
Заглавие: 

а проверил ли си char-а каква стойност има :)

Автор:  perro_iv [ Вто Фев 10, 2009 3:17 pm ]
Заглавие: 

MYXATA написа:
а проверил ли си char-а каква стойност има :)

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

Автор:  perro_iv [ Вто Фев 10, 2009 3:22 pm ]
Заглавие: 

Ники написа:
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:27 pm ]
Заглавие: 

Не става щото atoi иска като параметър указател към char, пък ти му подаваш копие на самия char.

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

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

Автор:  perro_iv [ Вто Фев 10, 2009 3:50 pm ]
Заглавие: 

Цецо написа:
Не става щото atoi иска като параметър указател към char, пък ти му подаваш копие на самия char.

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

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


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

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

Автор:  Dimitar [ Вто Фев 10, 2009 5:45 pm ]
Заглавие: 

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

Автор:  perro_iv [ Вто Фев 10, 2009 6:22 pm ]
Заглавие: 

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


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

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

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

Автор:  Dimitar [ Вто Фев 10, 2009 6:30 pm ]
Заглавие: 

Вместо да философстваш за целенето и кое как се наваксва, първо вземи почети малко :) . Когато почваш да се учиш директно на сложните неща и пропускаш необходими стъпала има опастност изведнъж да се изправиш пред няколко и то сериозни проблема, които да те откажат от заниманието или пък да похабиш повече време от колко ако беше почнал по "нормалния" начин 8) . От темата ти става ясно, че на теб ти липсват основни неща като типове данни и как се конвертират данни от един в друг тип. Сори ама USB-то съм абсолютно убеден, че в момента ти е една голяма черна кутия :) .
Цитат:
Ами когато стойността на числото е от 0 до 100?

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

Автор:  perro_iv [ Вто Фев 10, 2009 6:39 pm ]
Заглавие: 

Първо тука не обсъждаме как работи USB-то!
Второ попитах съвсем елементарни неща на които хората ми отговориха и си реших проблема!
Трето благодаря за изчерпателния отговор!

Автор:  Dimitar [ Вто Фев 10, 2009 7:27 pm ]
Заглавие: 

Супер, щом си решил проблема, но недей да разглеждаш темата като средство за решение само на твоя проблем, въпреки, че ти си и автора. Възможно е да я прочетат поне още 10 човека и те да искат да знаят какъв е правилния път, а не да повтарят чужди грешки 8) . Точно затова и раздела се казва "Академия", а не "Решения на конкретни проблеми". Както и да е де - стана ясно вече за какво си говорим :D .

Автор:  3aek [ Вто Фев 10, 2009 7:51 pm ]
Заглавие: 

господ да благослови Майкрочип и техните FAE които ни дават кодове които не разбираме а модифицираме, а после се чудим защо електрониката не работи

Автор:  Реконструктор [ Вто Фев 10, 2009 8:41 pm ]
Заглавие:  Re: Въпрос относно конвертиране

perro_iv написа:
Искам една char стойност да я конвертирам в int.
Правя следното
int p;
p=atoi(char);
и p си стои винаги 0;
Нещо явно не вдявам?
Става въпрос за PIC18F4550.


p = c - '0';

Автор:  Cino [ Вто Фев 10, 2009 10:09 pm ]
Заглавие: 

c&=0x0f;

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

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/