| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблеми с функцията long int atol(char *str) http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4146 |
Страница 1 от 2 |
| Автор: | Ugeen [ Чет Май 03, 2007 2:44 pm ] |
| Заглавие: | Проблеми с функцията long int atol(char *str) |
Колоеги,опитвам се да преобразувам един стринг в число от типа long int и не става.Пиша на CodevisionAVR.Ето кода: #include <mega8.h> #include <string.h> #include <stdio.h> // sprintf #include <math.h> #include <delay.h> #include<stdlib.h> #include<ctype.h> #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> char Proba[]= {"123456"}; unsigned long int Counter; char lcd_buffer[25]; // void main(void) ( PORTB=0x00; DDRB=0xFF; lcd_init(16); while(1) { Counter=atol(Proba); sprintf(lcd_buffer,"Counter=%u",Counter); lcd_gotoxy(0,0); lcd_puts(lcd_buffer); } } На дисплея извежда Counter=57920,нищо общо с истината.Компилатора е настроен функцията sprintf да работи с long,widht Къде според вас е проблема? |
|
| Автор: | HCL [ Чет Май 03, 2007 3:21 pm ] | |||||||||
| Заглавие: | ||||||||||
Опитай с
%u e unsigned decimal integer, a atol врьща long int. |
||||||||||
| Автор: | Ugeen [ Чет Май 03, 2007 3:25 pm ] |
| Заглавие: | |
Благодаря ти много ,така най-накрая проработи |
|
| Автор: | ps66 [ Чет Май 03, 2007 3:25 pm ] |
| Заглавие: | |
нещо за размисъл: (123456 % 65536) == 57920 |
|
| Автор: | HCL [ Чет Май 03, 2007 3:27 pm ] | |||||||||
| Заглавие: | ||||||||||
Като се замисля май ще е по-добре с
|
||||||||||
| Автор: | HCL [ Чет Май 03, 2007 3:42 pm ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | ps66 [ Чет Май 03, 2007 4:06 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
очевидно е че проблема е свъзан с преобразуване на типове! в такива случаи (проблеми sprintf(lcd_buffer,"Counter=%ld", (long int)Counter); разбира се %ld трябва да е (long int) ... това което начинаещите не разбират при sprintf (и всички с форматиращ стринг) и арг. "...") е че компилатора си няма и на идея какво има в форматиращия стринг (може да е променен и при изпълнение!)- така че преди да извика sprintf - тъпче в стека аргументите според типа им ... а дали съотвестват на форматиращия стринг (ред и тип) - само "автора" знае много от начинаещите обвиняват компилатора за това че sprintf не работи - а причината не е в него |
|||||||||||||||||||
| Автор: | Цецо [ Чет Май 03, 2007 5:52 pm ] |
| Заглавие: | |
Ми то това му е готиното на С-то. В повечето случаи компилатора разчита, че задклавиатурното устройство е наясно с типовете. Докато в по "висшите" езици тия проверки са вменени на компилатора. |
|
| Автор: | HCL [ Чет Май 03, 2007 6:19 pm ] | |||||||||
| Заглавие: | ||||||||||
Като се отвори дума, ще познаете ли на кой език е написан този код
|
||||||||||
| Автор: | Gogo [ Чет Май 03, 2007 8:03 pm ] | |||||||||
| Заглавие: | ||||||||||
Горното не знам на какъв език е писано, ама за това:
|
||||||||||
| Автор: | Cekins [ Пет Май 04, 2007 12:32 pm ] |
| Заглавие: | |
На Fortran ми мяза |
|
| Автор: | ps66 [ Пет Май 04, 2007 12:57 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
ако питаш сериозно: би трябвало да те наведе на мисълта че се печатат (само) младшите 2 байта от 123456, и ... да си зададеш въпроса: "защо?" а онова в Уффтопика: прилича на последен модел фортран 77 |
|||||||||||||||||||
| Автор: | HCL [ Пет Май 04, 2007 2:36 pm ] |
| Заглавие: | |
Да, там са му корените, по-специално става вьпрос за IDL. Както се вижда от пьрвите няколко реда езикьт е с динамично присвояване на типовете. Което е супер удобно за настолни приложения и всякакви а ла Матлаб изпьлнения, обаче забелязвате ли точките след всяка константа. Там са защото без тях стават фалове от време на време. Така че си е много добре, че при С-то програмистьт е дльжен да внимава от кой вид са му променливите. Малко е кофти в началото, но с времето се свиква, надявам се |
|
| Автор: | Cekins [ Пет Май 04, 2007 3:07 pm ] |
| Заглавие: | |
Точно по точките го познах |
|
| Автор: | Gogo [ Пет Май 04, 2007 5:06 pm ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|