המרה מHEX ל Byte


#1

כמה מילים על הבעיה.
צריך לנתח שורה ומיקום בשורה (שכתובה ב HEX)- נגיד שעשינו
צריך לתת משמעות לתוכן של המידע הזה.
לשם כך יש בקוד את המצבים השונים (מצ"ב)
הבעיה: לתת משמעות לפי Byte לערך שקיבלנו בHEX
לדוגמא:

  • מתוך קובץ הטקסט,הביט במקום ב6 וה 7 (מצ"ב)
    FROM RAW_DATA.text(שורה A1- הערך C0):

0A010E0001001200FAFF00000000A192C001

image%20(2)

FROM Open_SDLC.py :

    BIT_WORD_1 = 0
    if new_line_num == 'A1':
        if Status_Word_2[0:2] == '00':
            print('BIT WORD 1 PASS')
        if Status_Word_2[0:2] == '01':
            print('BIT WORD 1 FAIL - RAM check #0')
        if Status_Word_2[0:2] == '02':
            print('BIT WORD 1 FAIL - parameter checksum #1')
        if Status_Word_2 [0:2]== '04':
              print('BIT WORD 1 FAIL -  SW watch dog #2')
        if Status_Word_2 [0:2]== '08':
              print('BIT WORD 1 FAIL - electronics temp over range #3')
        if Status_Word_2 [0:2]== '10':
              print('BIT WORD 1 FAIL - Communication with ASE #4')
        if Status_Word_2 [0:2]== '20':
              print('BIT WORD 1 FAIL - Laser diode current over range #5')
        if Status_Word_2[0:2] == '40':
             print('BIT WORD 1 FAIL - Laser diode temperature over range #6')

image

        if Status_Word_2 [0:2]== '80':
              print('BIT WORD 1 FAIL - ASE CPU temperature over range #7')

image%20(1)


#2

הי,

לא הבנתי - אתה מנסה לכתוב קוד פייתון שימיר בין HEX ל Binary כחלק מתוכנית אחרת? או שאתה מנסה ספציפית לממש את פונקציית ההמרה כתרגיל?

אם זה הראשון יש כבר מנגנון built in בפייתון:

in_hex = '0a0d'
'{0:b}'.format(int(in_hex, 16))
# returns: "101000001101"

in_bin = "101000001101"
hex(int(in_bin, 2))
# returns: '0xa0d'

#3

ינון, היי ותודה.
אכן מנסה לכתוב קוד פייתון שימיר בין HEX ל Binary כחלק מתוכנית אחרת.
הרעיון הוא שיש לי פלט אותו אני צריך לנתח.
כאשר, הפלט הוא ב HEX - ולכל צמד Byte יש משמעות:
( דוגמא מאויירת של הפלט לשם המחשה)
EXP
כאשר יש מקסימום ל"מילה" ב HEX
MAX
ויש מינימום ל"מילה" ב HEX
MIN

כיון שראיתי שזה ארוך ולא ישים לכתוב במפורש את כל המצבים של ה1 וה 0 ,
מחפש דרך לתת משמעות של0 ו 1 (“ביטים”) ל(“מילה”) שקיבלתי ב HEX.

אם נחזור לדוגמא שהבאתי לפני זה:
זאת שורת הפלט:
0A010E0001001200FAFF00000000A192C001
לשם הדוגמא וההבנה התרכזתי ב:
C0
C0 ב HEX משמעותו בבינרי מבחינתי 1100000
נשאלת השאלה, איך אני נותן משמעות של
1100000
ל
C0


#4

כשאתה כותב ״משמעותו בבינארי מבחינתי״ - יש היגיון במשמעות הזאת? למה בחרת דווקא את המספר 1100000 בתור מה שמתאים ל c0 ?


#5

C0


#6

ומאיפה הגיעו ה-3 אפסים בסוף?

אם הם קבועים אז אני חושב שהקוד ששמתי פה קודם יכול לעזור:

in_hex = '0c'
'{0:b}'.format(int(in_hex, 16))
# returns: '1100'

#7

תודה ינון על הסבלנות והעזרה :slight_smile:

result