php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.11.2008, 18:17  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] ASCII-Zeichen zu Binärcode finden?

hiho,
ich versuche gerade folgendes: Ich habe einen Binärcode (z.B. 11111111) und versuche das ASCII-Zeichen zu "finden", das zu diesem Code gehört.
Warum? Ich muss große Datenmengen in eine Datenbank eintragen, darunter auch eine lange Liste von IDs (also Integern). Jetzt hatte ich mir überlegt, das ich ja statt "255" in die Datenbank einzutragen eben einfach das ASCII-Zeichen eintragen könnte das 1111 1111 repräsentiert. Dadurch würde ich statt drei bytes nur ein Byte schreiben.

Ist sowas möglich?

Vielen Dank
mfg
BlackWolf ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.11.2008, 18:29  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

In MySQL gibt es einen Datentyp der Binärzahlen speichern kann???

Also ich wüsste nicht dass es sowas gibt. Wenn du blob meint dann wirste damit nicht glücklich denn diese Typen können nicht durchsucht werden, außerdem sind sie größer als wenn du einfach einen Integer Wert speichern möchtest. Angenommen du nimmst den Datentyp tinyint könntest du 255 abspeichern und belegst nur 1 Byte.
Flor1an ist offline  
Alt 23.11.2008, 18:49  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
In MySQL gibt es einen Datentyp der Binärzahlen speichern kann???

Also ich wüsste nicht dass es sowas gibt. Wenn du blob meint dann wirste damit nicht glücklich denn diese Typen können nicht durchsucht werden, außerdem sind sie größer als wenn du einfach einen Integer Wert speichern möchtest. Angenommen du nimmst den Datentyp tinyint könntest du 255 abspeichern und belegst nur 1 Byte.
lustig, hatte in nem C-Forum jemanden gefunden der das gleiche machen wollte wie ich, und da hat ihn irgendwie auch keiner verstanden
Praktisches Beispiel: Ich habe eine Liste von Zahlen, die sieht meinetwegen so aus

255|34|45|...

Soweit so gut. Nun ist 255 in Binär ja 1111 1111. Und den Binärcode 1111 1111 kann man ->irgendwie<- als ein einzelnes ASCII Zeichen ausdrücken. Sprich ich könnte die Zahl 255 (3 bytes) in der Datenbank durch ein einzelnes ASCII-Zeichen (1 byte) ersetzen und dadurch natürlich 2 bytes sparen (mag knauserich klingen, aber ich habe EINIGE solcher die Listen die ziemlich lang werden können und muss wirklich schauen das ich Platz spare ). Jetzt muss ich nur die Zahl 255 bzw. die Binärzahl 1111 1111 eben in dieses ASCII Zeichen umwandeln - und da liegt das Problem.

Ideen?
mfg
BlackWolf ist offline  
Alt 23.11.2008, 18:52  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

chr halt. Aber Du hast
1. dann nur einen begrenzten ID Raum,
2. kannst das Ganze dann nur umständlich mit SQL verarbeiten
3. was Du an Platz sparst benötigst Du dann an Zeit, um das Ganze wieder auseinanderzufriemeln.

Ergo: Ich sehe da keinen Mehrwert.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 23.11.2008, 18:57  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

255 wird in der Datenbank aber nicht als 3 Byte sondern als 1 Byte gespeichert (mit dem richtigen Datentyp)! Ich weiß nicht wo dein Problem liegt?

Denn wenn du "11111111|111|11111" abspeichern wollen würdest, dann müsste das ja ein varchar oder text Feld sein und dann kannste gleich 255|3|54 abspeichern ...
Flor1an ist offline  
Alt 23.11.2008, 19:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, wenn er ne Liste hat kann er nun schlecht für jeden Wert ne Spalte machen. Und für jeden Wert ein Datensatz scheint ihm vermutlich zu umständlich.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 23.11.2008, 19:05  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
chr halt. Aber Du hast
1. dann nur einen begrenzten ID Raum,
2. kannst das Ganze dann nur umständlich mit SQL verarbeiten
3. was Du an Platz sparst benötigst Du dann an Zeit, um das Ganze wieder auseinanderzufriemeln.

Ergo: Ich sehe da keinen Mehrwert.
ja, chr machts, vielen dank ^^ Zum Rest:
1. Darüber bin ich auch grad am nachgrübeln
2. ?
3. Hm, könnte sein, das müsste ich dann noch austeten. Ich hab mich jetzt erstmal darauf konzentriert das möglichst wenig in der Datenbank steht, da eine große Datenbank ja generell die gesamte Webapplikation verlangsamen dürfte, oder? Ob sich das dann im Endeffekt zeitlich rechnet müsste ich noch testen.

Zitat:
Zitat von Flor1an Beitrag anzeigen
255 wird in der Datenbank aber nicht als 3 Byte sondern als 1 Byte gespeichert (mit dem richtigen Datentyp)! Ich weiß nicht wo dein Problem liegt?

Denn wenn du "11111111|111|11111" abspeichern wollen würdest, dann müsste das ja ein varchar oder text Feld sein und dann kannste gleich 255|3|54 abspeichern ...
Genau das ist der Punkt, das Feld muss text sein, darum kann ich eben nicht tinyint verwenden. Und ich möchte natürlich nicht 1111111|111 speichern Sondern statt 255|25|... speichere ich chr(255)."|".chr(25) usw.

danke für die antworten.
mfg

Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, wenn er ne Liste hat kann er nun schlecht für jeden Wert ne Spalte machen. Und für jeden Wert ein Datensatz scheint ihm vermutlich zu umständlich.
naja, nicht das es mir zu umständlich ist, aber die listen können wie gesagt zum teil sehr lang werden und haben zudem eine dynamische länge, darum fällt das ganz einfach weg.
BlackWolf ist offline  
Alt 23.11.2008, 19:08  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
speichere ich chr(255)."|".chr(25) usw.
Hmm, na dann kannst die Pipe aber auch weglassen. Ein character = ein Wert!
Darf man mal Hintergründe erfahren, wofür man solche Listen speichert?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 23.11.2008, 19:16  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Möchtest du im Textfeld den String: "chr(255)" speichern oder den Binärwert? Also "11111111"???

Denn wenn du chr(255) speicherst hast du 5 Zeichen mehr als wenn du nur 255 speichern würdest. Also ich versteh echt nicht was du machen möchtest.

Wenn du es in nem Textfeld speicherst IST JEDES ZEICHEN egal ob es ne 1 oder ne 5 oder sonst was ist gleich groß, also wenn du 1111 1111 spiecherst ist das größer als 255!


*edit*
Ach ich glaub jetzt weiß ich wodrauf du hinaus willst ... das ASCII zeichen von 255 wäre bei mir jetzt:

ÿ

Mh ich muss sagen das find ich ansich nicht grad besonders super. Denn was bringt es dir wenn du halt anstatt 3 Zeichen 1 speicherst? Denn du bekommst richtig Probleme wenn du mal was suchen möchtest, dann musst du JEDEN Datensatz durchgehen IMMER ALLES komplett zerhacken, den richtigen Wert rausfinden und so weiter ... wofür soll das gut sein?

Speicher doch diese Liste lieber in einer eigenen Tabelle ab, dann wäre dein Datenbankschema auch gleich noch Normalisiert.

Und wenn es dir um die Performance geht, dann ist das auslesen dieser Daten wohl deutlich langsamer als wenn du einfach die normalen Zahlen verwendest, ob jetzt ein Datensatz etwas größer oder kleiner ist denke ich mal dürfte den unterschied nicht so groß machen.

Geändert von Flor1an (23.11.2008 um 19:24 Uhr).
Flor1an ist offline  
Alt 23.11.2008, 19:19  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Hmm, na dann kannst die Pipe aber auch weglassen. Ein character = ein Wert!
Darf man mal Hintergründe erfahren, wofür man solche Listen speichert?
ja, das mit der pipe kommt zum einsatz falls mir 255 als maximalwert nicht reicht

Naja, das ganze ist etwas komplizierter, im Grunde läuft es darauf heraus: Ich habe eine (ziemlich große!) Karte und diese muss ich in relativ kleine Quadrate einteilen. Dadurch ergibt sich einfach eine extrem hohe Anzahl an Quadraten, und jedes dieser Quadrate hat nun leider auch noch Eigenschaften -_- Sprich ich muss einfach große Datenmengen speichern.
Zuerst hatte ich das ganze eigentlich so geplant, in PHP eine Kartenklasse zu entwerfen die ein Array enthält das lauter Objekte vom Typ "Quadrat" enthält. Das ganze wollte ich serialisiert in die DB schreiben. Als mir klar wurde das die anzahl an Quadraten wahrscheinlich ziemlich groß werden wird, habe ich das schnell wieder verwerfen müssen, da die Objekte einfach riesig werden würden (zwar kann man die über serialize() und gzcompress() recht klein speichern, aber das PHP-Script verbraucht auf die Weise einfach zuviel RAM wenn es derart große Objekte verwendet).
So. Meine zweite Idee war nun folgende: Jedes Feld hat zwar Eigenschaften, aber es gibt auch viele gleiche Felder, die also gleiche Eigenschaften besitzen. Hat ein Feld nun z.B. die Eigenschaften A, lege ich dafür einen Eintrag in der Datenbank an der die Eigenschaften A beschreibt.
Speichere ich nun die Karte muss ich ja irgendwie eine Liste der Quadraten speichern aus denen diese Karte besteht. Jetzt kann ich, anstatt eine Liste von Eigenschaften oder eine Liste von "Quadrat"-Objekten zu speichern (was riesig wird), eben eine Liste von IDs speichern, wobei jede ID einem Eigenschaften-Eintrag in der DB entspricht.
Diese Liste kann ich später auslesen und über die IDs die Eigenschaften der Felder aus der Datenbank holen. Nun versuche ich eben gerade diese Liste von IDs zu optimieren, sprich den Speicherverbrauch solcher Listen möglichst klein zu halten. Und da kam dieser Thread ins Spiel ...
Nochmal praktisches Beispiel: Ich speichere die Eigenschaftenzusammenstellung A in der Datenbank ab und diese bekommt die ID 1. nun kann ich bei jeder Karte die ich verwende, immer dann wenn ein Feld die Eigenschaften A hat, einfach die ID1 schreiben. Und dadurch ergibt sich dann diese Liste:
2|35|24|... ist dann eben eine Liste von IDs die zu Eigenschaftenzusammenstellungen führen.

Keine Ahnung ob man das jetzt kapiert hat, das war ein Versuch das was ich gerade mache in Kurzfassung zu bringen Vielleicht ist mein Ansatz auch idiotisch, dann sagt es mir bitte, aber ich muss mich einfach mit sehr großen Datenmengen rumschlagen. Ich kann es derzeit noch nicht 100% abschätzen, aber Karten mit bis zu 4000*4000 Quadraten halte ich für möglich, was ja dann 16 Millionen(!) Quadraten entspricht (die ich übrigens nicht in eine Zeile der Datenbank schreibe. Ich werde automatisiert jede Karte in 50*50 Felder unterteilen, und immer nur den Teil der Karte auslesen den ich brauche. Das ändert aber natürlich nichts an der Menge der zu speichernden Daten). Ich denke da wird auch klar warum es auf jedes Byte ankommt

mfg

Zitat:
Zitat von Flor1an Beitrag anzeigen
Möchtest du im Textfeld den String: "chr(255)" speichern oder den Binärwert? Also "11111111"???

Denn wenn du chr(255) speicherst hast du 5 Zeichen mehr als wenn du nur 255 speichern würdest. Also ich versteh echt nicht was du machen möchtest.

Wenn du es in nem Textfeld speicherst IST JEDES ZEICHEN egal ob es ne 1 oder ne 5 oder sonst was ist gleich groß, also wenn du 1111 1111 spiecherst ist das größer als 255!
Natürlich speichere ich nicht chr(255) als Text. Ich speichere in der Datenbank das, was die Funktion PHP-Funktion chr(255) mir zurückliefert - und das ist eben ein einzelnes Zeichen, also ein Byte. Diesed kann ich dann beim Auslesen aus der Datenbank über ord() wieder in die Zahl 255 umwandeln.

Geändert von BlackWolf (23.11.2008 um 19:25 Uhr).
BlackWolf ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Benutze Zeichen anzeigen! cokotech Datenbanken 3 06.06.2008 18:24
erste 7 zeichen überprüfen aircrash PHP Tipps 2008 1 28.09.2007 09:11
Regex Problem in Verbindung mit ASCII Zeichen R4v3r PHP Tipps 2007 4 15.02.2007 17:41
Wieviel Pixel hat ein Zeichen? Ausmessen eines DIV-Container webazubi PHP-Fortgeschrittene 4 06.07.2006 14:52
ascii zeichen umwandeln rooomka HTML, Usability und Barrierefreiheit 1 28.04.2006 19:45
Unsichtbares Zeichen - IE vs. Firefox Cyberbob_at_tot PHP Tipps 2006 13 13.02.2006 17:23
JAvaScript:Interger zu ASCII Zeichen Xalon HTML, Usability und Barrierefreiheit 7 30.12.2005 19:33
ASCII - Zeichen im Forum (Dos statt Windows)?! Brease Off-Topic Diskussionen 13 26.11.2005 13:46
[Erledigt] Zeichen ersetzen in einem Dokument PHP Tipps 2007 16 25.11.2005 14:16
[Erledigt] Konvertierung OEM ASCII zu Windows ANSI Zeichen PHP-Fortgeschrittene 5 12.08.2005 12:42
ASCII - Zeichen in String einbinden faux PHP Tipps 2005 10 28.05.2005 18:29
Datei auslesen bis zu einem bestimmten zeichen. (Shoutbox) PHP Tipps 2005 7 01.01.2005 20:41
[Erledigt] nur x zeichen zeigen PHP Tipps 2004-2 2 17.12.2004 15:10
Die 1. 15 Zeichen anzeigen imported_Lumio PHP Tipps 2004 2 23.08.2004 16:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
binärcode zeichen, ascii code quadrat, binärcode sonderzeichen, sonderzeichen binärcode, binärcode 111111, ascii größer gleich, binärcode ascii, binärcode 255, zeichen in binärcode, binärcode tabelle, zeichen im binärcode, binärcode 11111111, zeichen binärcode, größer gleich ascii, ascii quadrat, http://www.php.de/php-tipps-2008/49270-erledigt-ascii-zeichen-zu-binaercode-finden.html, binärcode in zeichen, binärcode liste, ascii binärcode, ascii code binärcode

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum