Seite 1 von 1

char array

Verfasst: Dienstag 29. März 2005, 16:14
von miller_m
hallo zusammen,

bin neu was python angeht. ich wollte einen exporter für blender
schreiben. da mein file format (binär) natürlich schon existiert muss ich
was äquivalentes zu c bzw c++ finden.

1.) ich speichere datei namen usw in einem char array (c)

Code: Alles auswählen

char	szFile[32];
das heisst ja nichts anderes das ich 32 bytes in eine datei schreibe mit
einem nullterminierten string als inhalt. wie löse ich das in python?

2.) gibt es sowas wie einen sizeof operator in python? da das file format
chunk basierend ist hab ich immer die grösse der klasse * anzahl genommen und wusste wieviel bytes ich schreiben musste.

Code: Alles auswählen

// bsp c++
// ctor mit chunkname und chunkgrösse
Chunk chkVertices("Vertices", sizeof(Vector4f) * nNumVertices);

Re: char array

Verfasst: Dienstag 29. März 2005, 16:23
von jens
miller_m hat geschrieben:das heisst ja nichts anderes das ich 32 bytes in eine datei schreibe mit einem nullterminierten string als inhalt. wie löse ich das in python?
Meinst du sowas:

Code: Alles auswählen

f = file( "meinedatei.dat", "wb" )
f.write( "\x00" * 32 )
f.close()
miller_m hat geschrieben:gibt es sowas wie einen sizeof operator in python?

Code: Alles auswählen

len(Vector4f) * nNumVertices

Re: char array

Verfasst: Dienstag 29. März 2005, 16:41
von miller_m
jens hat geschrieben:

Code: Alles auswählen

f = file( "meinedatei.dat", "wb" )
f.write( "\x00" * 32 )
f.close()
so wie das für mich aussieht schreibst du 32 bytes null
wenn ich zb sowas bräuchte (0 == nullzeichen)
teststring\n00000000000000
und die ganze geschichte gesamt 32bytes lang.
miller_m hat geschrieben:gibt es sowas wie einen sizeof operator in python?

Code: Alles auswählen

len(Vector4f) * nNumVertices
sieht gut, allerdings wie kann ich die grösse der member, beim schreiben ins file oder prinzibel, garantieren (hab die deklationen von python noch nicht ganz begriffen)
bsp:
Vector4f sollte vier member vom typ float besitzen somit müsste mir
len() 4 * 4 byte zurückgeben

Re: char array

Verfasst: Dienstag 29. März 2005, 16:49
von jens
Ich kenne mich mit Binär-Dateien zu wenig aus... Du solltest dir vielleicht mal das Modul struct ansehen:
http://www.python.org/doc/lib/module-struct.html

Um immer eine 32Byte länge zu erreichen könnte man eine einfache Funktion schreiben:

Code: Alles auswählen

def jo( txt, bytes = 32 ):
    txt += "\n"
    return txt + "\x00" * ( bytes - len(txt) )

test = jo("jup")
print "XXX%sXXX" % test
print len(test)

Verfasst: Dienstag 29. März 2005, 16:56
von miller_m
die funktion sieht gut, danke dir. link werde ich mir mal anschauen.

Verfasst: Dienstag 29. März 2005, 17:05
von jens
Mit struct geht's so:

Code: Alles auswählen

import struct
txt = "jup"
test = struct.pack('32s', txt + "\n" )

print "XXX%sXXX" % test
print len( test )

Verfasst: Dienstag 29. März 2005, 17:30
von miller_m
struct find ich besser hab es so gelösst. nullterminierung ist dann unnötig bzw. hat sowieso nicht hingehaut.