Seite 1 von 1

Hexadezimalwerte aus Structure richtig anzeigen

Verfasst: Dienstag 12. Februar 2013, 14:05
von SandyH
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!

Re: Hexadezimalwerte aus Structure richtig anzeigen

Verfasst: Dienstag 12. Februar 2013, 14:24
von 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.

Re: Hexadezimalwerte aus Structure richtig anzeigen

Verfasst: Dienstag 12. Februar 2013, 14:30
von SandyH
wow das war ja eine schnelle Antwort, und was soll ich sagen:
so funktionierts!
Manchmal hat man echt einen Hänger.....
Dankeschön!!! :D