Hexadezimalwerte aus Structure richtig anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SandyH
User
Beiträge: 2
Registriert: Dienstag 12. Februar 2013, 13:42

Hallo,
ich habe eine Structure definiert:

Code: Alles auswählen


## Message Structure
class PASSTHRU_MSG(Structure):
    _fields_ = [("ProtocolID", c_ulong),
                ("RxStatus", c_ulong),
                ("TxFlags", c_ulong),
                ("Timestamp", c_ulong),
                ("DataSize", c_ulong),
                ("ExtraDataIndex", c_ulong),
                ("Data", c_byte*12)] 
Diese Structure fülle ich mir im Laufe des Programmes mit Werten:

Code: Alles auswählen


    gReadFazitString = PASSTHRU_MSG()

    gReadFazitString.ProtocolID = CAN
    gReadFazitString.TxFlags = 0
    gReadFazitString.Timestamp = 50
    gReadFazitString.DataSize = gCanDataSize
    gReadFazitString.Data[2] = 0x07 
    gReadFazitString.Data[3] = 0xE1
    gReadFazitString.Data[4] = 0x03 
    gReadFazitString.Data[5] = 0x22
    gReadFazitString.Data[6] = 0xf1
    gReadFazitString.Data[7] = 0x7c
    gReadFazitString.Data[8] = 0xAA
    gReadFazitString.Data[9] = 0xAA
    gReadFazitString.Data[10] = 0xAA
    gReadFazitString.Data[11] = 0xAA
möchte ich mir die Timestamp mit

Code: Alles auswählen

print "Timestamp: ", gReadFazitString.Timestamp
anzeigen lassen, kommt der richtige Wert (50) heraus

nun möchte ich mir die Daten anzeigen lassen:

Code: Alles auswählen

x=2
    while x<12:
        print x
        val = gReadFazitString.Data[x]
        print "gesendet: ", hex(val)
        x = x+1
aber anstatt die Werte 0x07 0xE1 0x03 0x22 0xf1........0xAA

Bekomme ich:

2
gesendet: 0x7
3
gesendet: -0x1f
4
gesendet: 0x3
5
gesendet: 0x22
6
gesendet: -0xf
7
gesendet: 0x7c
8
gesendet: -0x56
9
gesendet: -0x56
10
gesendet: -0x56
11
gesendet: -0x56

angezeigt :K

Kann mir das jemand erklären ? Weis jemand, wie ich mir die Hexwerte anzeigen lassen kann?

Danke schonmal!
BlackJack

@SandyH: Wenn die ohne Vorzeichen haben möchtest, solltest Du das in der Struktur auch entsprechend als Bytes ohne Vorzeichen definieren, also `ctypes.c_ubyte` statt `ctypes.c_byte`.

Aus der ``while``-Schleife würde man wohl eher eine ``for``-Schleife machen.
SandyH
User
Beiträge: 2
Registriert: Dienstag 12. Februar 2013, 13:42

wow das war ja eine schnelle Antwort, und was soll ich sagen:
so funktionierts!
Manchmal hat man echt einen Hänger.....
Dankeschön!!! :D
Antworten