קבצים בינאריים - בהקשר ללחששנית

חפרתי בגוגל ובסרטונים ובמה לא… ולא הצלחתי להבין משהו ממש בסיסי על קבצים בינארים (לחששנית). :confused:
קובץ בינארי אמור להיות מורכב מבתים (bytes), ואם למשל בוחרים בתצורה הקסאדיצימלית, אז שני בתים יראו כך
\x83\xe5\ (למשל). האיקס מייצג שזה הקסאדצימלי, ושני התוים מייצגים כל אחד עד 4 ביטים.

אז מה המשמעות שאני רואה בקובץ גם דברים כמו \t\ או \x9en|\ ? האם בהכרח כל מה שבין שני \ הוא בית?
איך זה מסתדר מבחינת גודל בתים (כל בית הוא 8 ביט)?
גם כשאני בא לקרוא בית בית, לפעמים הוא קורא לי משהו צפוי (איקס ואחריו שני תוים) ולפעמים רק תו בודד בלי X ובלי \

ובהקשר לתרגיל - אם זה כך - איך אפשר לבודד את סימן הקריאה, ועוד שאנחנו לא יודעים כמה תוים אמורים להיות לפניו… למשל - אם אני מחליט לקרוא כל פעם 10 בתים ולטפל בהם, באיפה לי שהמחרוזת לא נחתכת בסוף הבתים האלה וממשיכה הלאה? כלומר אני אצטרך לזכור כל פעם את מחזורת העבר שלי כדי לוודא שאין לי איזה סימן קריאה…
הלכתי לאיבוד לגמרי

בנוגע לפסקה האחרונה – תחשוב עוד קצת.

העשרה קצרצרה ולא מחייבת בנוגע לבייטים שראית:
בייט/בית = 8 ביט. אני לא הולך להכנס פה להרצאת קידוד כי זה נושא ארוך עם הרבה דברים קטנים להכנס אליהם. בגדול כל דבר שנראה כמו \x ואז שני תווים מייצג בייט אחד.

כל מה שמופיע אחרי \x הוא ייצוג הקסדצימלי של התו (במקרה שאין לתו ייצוג הולם אחר, קרי, התו אינו דפיס). \t זו דוגמה טובה לתו מיוחד (טאב) שמיוצג אחרת.

3 לייקים

השאלה המרכזית כשאני בא לפתור את התרגיל הספציפי הזה:
האם מילות המסר יופיעו בהכרח לפני הסימן קריאה וללא הפרדה של \, או שתיתכן הפרדה כזו?

כי כשאני פותר בצורה של “חפש כל מה שיש לפני סימן קריאה” (ללא התחשבות ב \ ) אז אני מוצא את המסר וגם עוד כמה מחרוזות, שעונות לתנאים (ארוכות מ-5 ואותיות קטנות בלבד)

לא תתכן הפרדה, המילים יבואו ישירות לפני !

לייק 1

שאלה נוספת בהקשר לתרגיל וקבצים בינאריים,

למה כשעברתי על כל תו ב-file handler בלולאת for קיבלתי את הקוד UNICODE של כל תו?

משהו שלא למדנו הוא שה־file handler הוא iterable

שאלה:
אז בעצם אפשר היה לייתר את הגנרטור ולעבוד ישירות על ה- file handler? הרי הוא גם “זרם מידע” שמפעילים כל פעם כשמבקשים.

אכן אפשרי לעשות for ישירות על ה־file handler

לייק 1

באופן כללי, ללא קשר לתרגיל הנ"ל (שבו היו הורדות שורה) -
זה נכון שלפי מה שקראתי ה - file handler מפסק כל סיום שורה?
אז מניחה שלא נכון לסמוך על זה אלא יש לפסק לפי chunks שאנחנו בוחרים, בהנחה שלא תמיד נדע אם יש הורדת שורה?

האם for על ה file handler אומר שהגנרטור מיותר? אני עבדתי בהנחה שלא, כלומר בהנחה שאמצא את המסרים בקובץ עד ש"ימאס" לי (אם היה קובץ ארוך מדי הייתי מוצאת את המסרים הראשונים - למשל אם המסר החמישי היה אומר “lastmessage!” אבל הקובץ עוד היה ארוך אחריו :wink: )