נשלח בתאריך: 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)איך להמיר את המחרוזת למספר?
|