קריאת WORD ב java

niro a

New member
קריאת WORD ב java

חברים איך אני קורא ערך WORD מקובץ, זה לא כמו לקרוא SHORT למרות ששניהם שני בתים! (ב JAVA ) תודה רבה לכל המנסים.
 

niro a

New member
תגובה

עד כמה שאני מבין בקריאה מקובץ של משתנים של 2 בתים יש חשיבות לBYTE של הערך הגבוה ולזה של הערך הנמוך ולפי מיטב הבנתי הסדר שלבם בשני המשתנים הפוך. ולכך אני צריך שיטה לקריאה WORD
 

melatonin

New member
הסבר

ישנן שתי שיטות לייצוג נתונים בזכרון: Big Endian - הבתים מסודרים מה- LSB (הספרה הפחות חשובה) ל- MSB (בספרה היותר חשבה) - כלומר המספר 0x1234 יסודר כך ש 0x34 יבוא קודם ו 0x12 אחריו Little Endian - מה MSB ל- LSB - כלומר 0x1234 יסודר כך ש 0x12 יבוא לפני 0x34. עכשיו משהבנו את זה: word, בהגדרתו, הוא מספר בעל שני בתים. אין משמעות לסדר. אתה אולי מתבלבל עם ייצוג של word בשפה כלשהי ובארכיטקטורה כלשהי (אאל"ט, מעבדי אינטל עובדים ב Big Endain), אבל להגדרת המושג word אין קשר לסדר הבתים בזכרון. short של ג'אווה הוא טיפוס בגודל שני בתים, ולכן הוא הטיפוס המינימלי לייצוג word. ג'אווה כהגדרה עובדת ב Little Endian עבור כל סוגי המשתנים שלה, מה שאומר שיותר טבעי לקרוא נתונים בינארים ב Little Endian מאשר Big Endian (לא שזה לא אפשר, כמובן). עכשיו, אחרי כל זה - האם הנתונים שאתה קורא הם Big Endian או Little Endian?
 

niro a

New member
תגובה

קודם כל ,יפה על ההשקעה האופן בו הסודרים הנתונים הוא Big Endian וכשאני קורא את הנתונים ע"י FileInputStream fin=new FileInputStream("file.txt"); DataInputStream din=new DataInputStream(fin); din.readshort(); זה לא נותן לי את הנתון הנכון.
 
צריר לקרו את זה byte by byte

byte lb,hb; lb=din.readByte hb=din.readByte int result = hb*256+lb אם זה עדדיין לא נכון תחליף את סדר הקריאה
 

niro a

New member
תגובה

שוב, הרבה תודה על הנסיון לעזור אבל שתי השיטות שהוצאו לא מניבות את התוצאה הרצויה .
 

niro a

New member
big

לפי ההגדרה בהודעה הראשונה מדובר בBIG אבל בכל מקרה זהו הסדר הנדרש: כלומר המספר 0x1234 יסודר כך ש 0x34 יבוא קודם ו 0x12 אחריו
 
תסתכל על הקובץ עם hex editor

ותסתכל בדיוק מה יש בו באופסט המתאים (readByte קורא בדיוק את תוכן הקובץ)
 

melatonin

New member
אני לא מבין

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