Marscel
2007-12-28, 14:27:29
Ich habe einen Integer-Wert, der einen Zeitstempel mit 10 Ziffern repräsentiert, sei es 1198847717.
Dieser Wert kostet 31 bit und soll jetzt in eine Datei abgespeichert werden, bei der es etwas auf Platzbedarf ankommt, '1198847717' (als String) reinzuschreiben kommt überhaupt nicht infrage, kostet viel Platz.
1198847717 = 0x4774F6E5
Ich hatte nun die Idee, die Hex-Darstellung binary in die Datei zu schreiben, da gehen 4 Byte für drauf, heißt '\x47\x74\xF6\xE5'.
Jetzt hab ich diese Perl-like Funktionen pack() und unpack() gefunden, die anscheinend genau das tun können.
So recht komme ich damit aber noch nicht klar, welches Format angeben, welchen Wert?
- pack('H*', 1198847717) packt jedenfalls nicht das gewünschte Ergebnis,
- pack('H*', '4774F6E5') macht schon das richtige, allerdings gehts doch sicher eleganter, dass man nicht erst die Hex-Repräsentation in einen String umwandeln muss, oder?
Sprache ist PHP oder Python (mit Präferenz bei letzterem), aber das sollte nichts zur Sache tun hier. Ich find die Lösung nicht, habe schon herumprobiert, aber so recht wills nicht.
Dieser Wert kostet 31 bit und soll jetzt in eine Datei abgespeichert werden, bei der es etwas auf Platzbedarf ankommt, '1198847717' (als String) reinzuschreiben kommt überhaupt nicht infrage, kostet viel Platz.
1198847717 = 0x4774F6E5
Ich hatte nun die Idee, die Hex-Darstellung binary in die Datei zu schreiben, da gehen 4 Byte für drauf, heißt '\x47\x74\xF6\xE5'.
Jetzt hab ich diese Perl-like Funktionen pack() und unpack() gefunden, die anscheinend genau das tun können.
So recht komme ich damit aber noch nicht klar, welches Format angeben, welchen Wert?
- pack('H*', 1198847717) packt jedenfalls nicht das gewünschte Ergebnis,
- pack('H*', '4774F6E5') macht schon das richtige, allerdings gehts doch sicher eleganter, dass man nicht erst die Hex-Repräsentation in einen String umwandeln muss, oder?
Sprache ist PHP oder Python (mit Präferenz bei letzterem), aber das sollte nichts zur Sache tun hier. Ich find die Lösung nicht, habe schon herumprobiert, aber so recht wills nicht.