Seite 1 von 1

Str umwandeln mit \x ...

Verfasst: Freitag 4. Mai 2012, 19:31
von winterfest
Hallo,

ich versuche folgenden str zu versenden:

Code: Alles auswählen

b'\x4cSTARTîrgendêin^text^\x00'
das ist so (wie oben gezeigt) auch alle kein Problem.

Nur möchte ich jetzt die 4c verändern und dann einen str zusammenbauen, den ich versenden kann.

leider kann ich nicht nach dem Muster:

Code: Alles auswählen


var = 4c
temp = b'\x' + var +'STARTîrgendêin^text^\x00'
vorgehen!

Wie kann ich es anstelle so einen str zu konstruieren?

Beste Grüße,

winterfest

vorgehen

Re: Str umwandeln mit \x ...

Verfasst: Freitag 4. Mai 2012, 19:48
von BlackJack
@winterfest: '\x4c' ist *ein* literales Zeichen:

Code: Alles auswählen

In [718]: len('\x4c')
Out[718]: 1
Diese Schreibweise dient dem Compiler dazu *bevor* das Programm abläuft beliebige Bytewerte als ASCII-Zeichenfolgen verarbeiten zu können. Das hier sollte gehen:

Code: Alles auswählen

temp = bytes([var]) + b'STARTîrgendêin^text^\x00'

Re: Str umwandeln mit \x ...

Verfasst: Freitag 4. Mai 2012, 20:44
von winterfest
Hallo,

danke für die schnelle Antwort. Soweit ist mir das jetzt klar!

Nur, möchte ich ja gerade die Automatische zusammenstzung konstruieren

Code: Alles auswählen


i = [1,2,3,4]

for x in i:
      sende('\x' + x + 'irgendwas\x00'   )


wobei das '\x' das Problem ist!

Grüße und danke für die Hilfe!

Re: Str umwandeln mit \x ...

Verfasst: Freitag 4. Mai 2012, 21:10
von BlackJack
@winterfest: Wenn es Dir soweit klar ist, dann habe ich Dir gerade die Lösung gesagt. Wo ist denn da jetzt das Problem? Das '\x..' ist eine Schreibweise für *literale* Bytewerte. Das ist für den Quelltext und die Übersetzung und nicht für die Laufzeit.

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 07:43
von winterfest
Hallo,

ja genau da ist ja mein problem! Ich kann keinen str nach dem schema zusammensetzen!

Code: Alles auswählen

temp = b'\x' + b'ff' + b'irgendwas'
ich glaube mein Problem wurde noch nicht verstanden!


Grüße,

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 08:55
von deets
Ich denke mal du brauchst chr(var) - zumindest in Python 2.x. Alternativ koennte auch das Modul struct von Interesse sein. In Python 3 liefert chr einen unicode string zurueck - ob's da auch was fuer bytes gibt weiss vielleicht jemand hier.

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:03
von winterfest
Hallo,

danke für die Antwort. Im speziellen möchte ich einen Str über einen Socket versenden.

der str. soll so aussehen b'\xffSTART^irgendewas^\x00',

wobei \xff das Startzeichen und \x00 das Endezeichen sind.

\xff gibt die länge der Zeichenfolge an die versendet wird.

nur als Hintergrund-Info.

Wie kann ich jetzt an besten anstelle diesen Str. zusammenzubauen?

Grüße,

Winterfest

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:10
von BlackJack
@winterfest: Dein Problem wurde verstanden, Du ignorierst bloss die Antwort. Hier ist noch einmal die gleiche Antwort wie oben (für Python 3.x, denn bei Python 2.x würden die b'…' nicht so viel Sinn machen):

Code: Alles auswählen

temp = bytes([var]) + b'STARTîrgendêin^text^\x00'
Was passt Dir daran nicht!?

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:24
von winterfest
Hallo BlackJack,

danke nochmal für die Antworten.

wie kann ich denn var für bytes([var]) zusammenbauen?

Code: Alles auswählen

var = b'\x' + mein_hexwert
Was passt Dir daran nicht!?
das ich immer noch nicht weiß wie ich var zusammensetze!

Grüße

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:31
von deets
Vergiss doch mal endlich die \x-geschichte. Das funktioert nicht!

Code: Alles auswählen

var = bytes([mein_hexwert])
@BlackJack ich kannte die notation nicht, und bytes(100) im REPL gab was komplett anderes aus - darum hatte ich nochmal gepostet.

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:33
von BlackJack
@winterfest: Jetzt hör doch bitte mal mit dem b'\x' + irgendwas auf. :roll: Nach dem x müssen zur *Übersetzungszeit* zwei *feste* Zeichen *direkt* in der *gleichen* Zeichen-/Bytekette im *Quelltext* stehen. Noch so viel Wünschen und Hoffen Deinerseits, dass man den Quatsch nur oft genug hinschreiben muss und dann geht das irgendwann auf magische Weise, wird daran etwas ändern.

`var` musst Du nicht zusammen bauen, das ist der Bytewert. Eine Zahl. In Deinem Fall dann wohl die Länge von der Nachricht.

Re: Str umwandeln mit \x ...

Verfasst: Samstag 5. Mai 2012, 09:39
von winterfest
Danke Danke Danke!

für eure Gedult und die Hilfe, die ich gestern noch nicht verstanden habe.


Grüße,