נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: קריאה וכתיבת נתון למחרוזת והמרה למספר

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אלי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 26 March 2009 בשעה 16:42 | IP רשוּם
ציטוט אלי

שלום רב

אני צריך צריך להכניס נתונים לזיכרון ולקרוא אותם מאוחר יותר. לשם זה אני צריך להפוך אותם למחרוזת ואח"כ ממחרוזת להחזיר למספר. הקומפיילר שלי לא מכיר את atoi(), itoa() כך שזה עושה את החיים קצת יותר קשים. אני עושה את זה בצורה כזו כי אני רוצה שלכל משתנה יוקצו 8 בייט בזיכרון, כך שאוכל לעבוד על כל משתנה בנפרד בלי לנסות לחשב מה האורך שלו. מה שקורה בפועל זה שבמוקום לקבל מחרוזת "00025000" אני מקבל "2500"

 

flash_result = FlashErase( BLOCK_A );
   sprintf(tmp_str, "%i", pulses_left);
   memcpy(pulses_left_str + (PULSES_SIZE - sizeof(tmp_str)), tmp_str, sizeof(tmp_str));
   sprintf(tmp_str, "%i", old_bundle);
   memcpy(old_bundle_str + (PULSES_SIZE - sizeof(tmp_str)), tmp_str, sizeof(tmp_str));
   sprintf(tmp_str, "%i", work_mode);
   memcpy(work_mode_str + (PULSES_SIZE - sizeof(tmp_str)), tmp_str, sizeof(tmp_str));
   

 

כשאני מוציא את הנתונים אני ממיר אותם חזרה למספר. כאן אני לוקח את המחרוזת ומחלק אותה לשלושת הפרמטרים:

memcpy( pulses_left_str, flash_pointer, PULSES_SIZE );
   memcpy( old_bundle_str, flash_pointer + PULSES_SIZE, PULSES_SIZE );
   memcpy( work_mode_str, flash_pointer + (PULSES_SIZE * 2), PULSES_SIZE );

 

ופה אני הופך אותם למספר, כאשר pow() נותנת לי את סדר הגודל העשרוני של כל ספרה

for(ind = 0; ind < PULSES_SIZE; ind++)
   { 
    power =  pow(10, (int)(PULSES_SIZE - 1 - ind));            
    pulses_left += (pulses_left_str[ind] - 48) * (unsigned char)power;
    old_bundle  += (old_bundle_str[ind]  - 48) * (unsigned char)power;
    work_mode   += (work_mode_str[ind]   - 48) * (unsigned char)power;     
   }

 

העניין הוא שאני מקבל תוצאה בכפולות של 16 ולכן יש לי תוצאה לא נכונה.

 

לסיכום יש לי שתי שאלות:

1)איך להעתיק מחרוזת למחרורזת אחרת שבה יש רק אפסים כך שהאפסים מצד שמאל נשמרים?

2)איך להמיר את המחרוזת למספר?

חזרה לתחילת העמוד הצג את כרטיס החבר של אלי חפש הודעות אחרות של אלי בקר בדף הבית של אלי
 
king445
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 23 January 2008
מדינה: Israel
משתמש: מנותק/ת
הודעות: 44
נשלח בתאריך: 28 March 2009 בשעה 01:11 | IP רשוּם
ציטוט king445

תעשה טובה תכתוב איזה שפה זה

__________________
מיכאל המלך!
חזרה לתחילת העמוד הצג את כרטיס החבר של king445 חפש הודעות אחרות של king445
 
פתקא
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 26 March 2009
משתמש: מנותק/ת
הודעות: 5
נשלח בתאריך: 29 March 2009 בשעה 09:31 | IP רשוּם
ציטוט פתקא

 

 שפת C

 

king445 כתב:
תעשה טובה תכתוב איזה שפה זה

חזרה לתחילת העמוד הצג את כרטיס החבר של פתקא חפש הודעות אחרות של פתקא
 
yohai
מנהל פורומים
מנהל פורומים
סמל אישי

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 29 March 2009 בשעה 21:15 | IP רשוּם
ציטוט yohai

אני חייב להגיד משהו,

זה זועק לעין שרוב הסיכויים הסתבכת,

ואתה יכול לפתור את מה שאתה רוצה בדרך הרבה יותר פשוטה,

לפי מה שאני מבין לפחות, אין שום סיבה שלא תוכל לעשות את הטריק הזה,

עם משתנים מסוג Char, פשוט תקצה לך מערך של chars, ובכל תא תשמור את הערך

המספרי שאתה רוצה, ואוולה, יש לך את הערך ב-8 bit, עכשיו אם אתה רוצה את הערך 

בחזרה, אין בעיה, הוא כבר נמצא שם,

אינני יודע מה מטרת התוכנית, אם לשמור ערך מספרי, בתור מחרוזת ולהציג את זה, או לא 

יודע מה, אבל מה שאני מבין, אני חושב שזה צריך להיות כיוון החשיבה שלך. 

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה