שאלה ב- vb6

Lady T

New member
שאלה ב- vb6

שלום. אני מנסה לקרוא ערך REG_BINARY בגודל 8 בתים מה-registry, ולהמירו ל-double. לאחר ניסיונות רבים, מצאתי שה-API CopyMemory מבצע את ההמרה, ויישמתי אותו באופן הבא, מצורף בקובץ הטקסט. בצורה זאת, הפונקציה תקרא ערך REG_BINARY, לדוגמא, ששווה ל- hex:1c,0e,9a,bf,fe,3f,73,40 ותחזיר את המספר 307.999694444444. ניתן לבצע את ההמרה גם באמצעות LSet. השאלה שלי היא כיצד מתבצעת ההמרה מבחינה מתמטית. אני רוצה לכתוב פונקציה, שתבצע את ההמרה בצורה ידנית, באמצעות פעולות חשבוניות בלבד. כיצד אוכל לעשות זאת? תודה.
 

cyoni87

New member
אין פה המרה מתמטית

המספר הממשי double מאוחסן בזיכרון כמו כל משתנה אחר (גודלו כגודל הזיכרון של ארבעה מספרים שלמים) אך במקום שיהיה כתוב המספר עצמו הוא מאוחסן בצורה אחרת (בהפשטה רצינית: מנטיסה+אקספוננט) כדי לאחסן אותו ברגיסטרי קוראים אותו כאוסף של מספרים הקסה דצימלים (זה כמו לפתוח קובץ תמונה בכתבן ולראות כל מיני סימנים לא ברורים - פשוט הכתבן קורא את התמונה כאוסף של מספרים בבסיס 256). כדי לשחזר אותו למספר ממשי פשוט מבצעים השמה של הערך שקיבלת מהרגיסטרי לתוך משתנה double. ובכל פעם שתבצעי פעולה כלשהי על המשתנה הממשי הזה, הוא כבר ידע איך לקרוא את המידע שכתוב שם ולתרגם אותו למספר. בכל מחשב ובכל מערכת הפעלה הפעולה הזאת היא קצת שונה. אני מקווה שלא סיבכתי אותך. אבל בקיצור - אין פה המרה.
 

פאשה0

New member
עוד משהו ../images/Emo26.gif

אפשר להעביר ישר את המשתנה double כפרמטר הרביעי לפונקציה RegQueryValueEx, ואז הוא יקבל את הערך ללא צורך בשום המרה נוספת.
 
למעלה