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

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

Автор:  Nekoj drug [ Вто Май 08, 2007 1:31 am ]
Заглавие:  Въпрос за конвертиране в Ц

Проблема ми е следния:
Въвеждам стринг от клавиатурата и искам да получа съответния ASCII код на всеки символ от низа. Да, обаче нещо не става. Ето отрязък от кода:
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
   
    char a[8];
    int c[8];
    gets(a);
   c[0]=atoi([0]);
}

Опитах и с atol, и с atoll, компилира се, обаче стига до реда за конвертиране и нещо сепрецаква...
Някой има ли идея как да се справя?

Автор:  Nekoj drug [ Вто Май 08, 2007 1:40 am ]
Заглавие: 

Всъщност, сега като чета, ако разбирам и правилно, atoi() конвертира само символен запис на числа в число, а?
Т.е. ще ми трябва друг метод...Някой да се сеща?

Автор:  Nekoj drug [ Вто Май 08, 2007 2:07 am ]
Заглавие: 

Нещата не вървят на добре. Ако си говорех сам- иди-дойди. Ама аз вече сам си пиша :D
Намерих начин да получа кода. Но пак бих се радвал на едно по-грамотно решение от моето:
Код:
int convert(char a)
{   
int k=a;
return a;
}

Автор:  Nikola Kirov [ Вто Май 08, 2007 2:33 am ]
Заглавие: 

Изобщо пишеш някакви глупости и искаш някой да ти отговаря :)

Код:
int main(){
   
    char a[8];
    int c[8];
    gets(a);
   c[0]=atoi([0]);
}


Какво мислиш че прави тази безмислица atoi([0]); ?

защо ти е ASCII символите да ги пишеш в int?
ako толкова държиш:
Код:
for ( int i=0; i<8; i++ ) c[i] = (int)a[i];

Автор:  Nekoj drug [ Вто Май 08, 2007 2:49 am ]
Заглавие: 

изпуснал съм едно а:
c[0]=atoi(a[0])
Но си прав. Като цяло въпроса ми не беше от най-умните :oops:
Аз направих същото като теб, само че в отделна функция. Защо да е просто, като може да е сложно :lol:
Мерси!

Автор:  zaphod [ Вто Май 08, 2007 8:15 am ]
Заглавие: 

абе човек, да не мислиш че тип чар е някаква малка буквичка, която мравчиците в процесора пишат на листче? чаровете са 8 битови интове, това е. така че няма какво да получаваш кода на символ - символа е кода си.

Автор:  bobyk [ Вто Май 08, 2007 9:11 am ]
Заглавие: 

И какъв е смисъла да преливаш от пусто в празно, глупава е самата идея не само реализацията. Не виждам никакъв смисъл :?: :?: :?: :?

Автор:  Nekoj drug [ Вто Май 08, 2007 9:15 am ]
Заглавие: 

Трябва ми за един проект в университета. Програмата трябва да работи и с букви на кирилица, като стринга трябва да има съответния вид(определена поредица букви и цифри).Аз самия доста се обърках, затова и писах тук... Не бъдете зли!

Автор:  Balkana [ Вто Май 08, 2007 10:00 pm ]
Заглавие: 

:) Някои програмни езици имат по-строго разграничаване на типовете от Ц :) След известно време копаене по този начин, инстинктивно си мислиш за конвертиране ...

Автор:  zaphod [ Вто Май 08, 2007 11:08 pm ]
Заглавие: 

Dr.UmriGo написа:
Трябва ми за един проект в университета. Програмата трябва да работи и с букви на кирилица, като стринга трябва да има съответния вид(определена поредица букви и цифри).Аз самия доста се обърках, затова и писах тук... Не бъдете зли!

може би имат предвид да изкараш текстов низ със числа, нещо от рода на 0х48,0х5е,0х20....

Автор:  Nekoj drug [ Чет Май 10, 2007 10:43 am ]
Заглавие: 

Цитат:
оже би имат предвид да изкараш текстов низ със числа, нещо от рода на 0х48,0х5е,0х20....

Ами не. Задачата ми е да напиша програма за обработка на данните на фирми, като има изискване регистрационния номер да съдържа кирилски букви и цифри в определена последователност. И понеже(това знам от асистента) не сме можели да знаем с каква кодова таблица работи съответния ДОС, трябва да обработваме символите като числа(long). Аз обаче изпробвам с латински букви, т.к. не мога да пиша на кирилица от командния ред на виндоуса.

Автор:  Nikola Kirov [ Чет Май 10, 2007 12:15 pm ]
Заглавие: 

gets() ти връща низ от char което ще рече че е нормална ASCII кодировка 8 бита.
Трябва да ползваш вероятно друга команда за вход за WCHAR вход. Но аз не съм ползвал при дос подобни неща и нямам идея как стоят нещата.
Но след като функцията с която си четеш входа връща 8 битов низ няма смисъл да го преобразуваш в WCHAR.
WCHAR е unsigned int а не long както казваш.

Автор:  zaphod [ Чет Май 10, 2007 1:58 pm ]
Заглавие: 

Dr.UmriGo написа:
Цитат:
оже би имат предвид да изкараш текстов низ със числа, нещо от рода на 0х48,0х5е,0х20....

Ами не. Задачата ми е да напиша програма за обработка на данните на фирми, като има изискване регистрационния номер да съдържа кирилски букви и цифри в определена последователност. И понеже(това знам от асистента) не сме можели да знаем с каква кодова таблица работи съответния ДОС, трябва да обработваме символите като числа(long). Аз обаче изпробвам с латински букви, т.к. не мога да пиша на кирилица от командния ред на виндоуса.

ами точно обратното - понеже не знаеш кодовата таблица НЕ трябва да обработваш символите като числа. например ако искаш да разбереш дали даден символ е цифра, не трябва да го сравняваш с 48-57, а с '0'-'9'. if(c>='0'&&c<='9')... това е проверка дали даден символ е цифра.

Автор:  Nekoj drug [ Чет Май 10, 2007 9:24 pm ]
Заглавие: 

Цитат:
WCHAR е unsigned int а не long както казваш
Не, те ни казаха да обработваме цифрите като long, а аз се задоволявам за сега с int.То всъщност unicode е 2 байта=>ако го използвам, ще трябва да го обработвам като long,нали?
Цитат:
if(c>='0'&&c<='9')
Е добре де, как ще стане тази работа, като '0' при компилацията ще си получи съответната ASCII стойност???

Автор:  zaphod [ Чет Май 10, 2007 10:04 pm ]
Заглавие: 

на кво пишете? под виндовс си има там едни макроси и типове, които целят инвариантност при смяна на кодовата таблицат. например низовете се слагат в _Т(), а символа има тип TCHAR, като тези неща с разни ифдефове се дефинират различно според това дали има дефинирано _UNICODE и _MBCS.

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