Re: wie bekomme ich den string in ein Byte[] Kategorie: Programmierung (von André H. - 30.03.2007 9:13) | ||
Als Antwort auf Re: wie bekomme ich den string in ein Byte[] von wernerAZ - 30.03.2007 4:30 | ||
| ||
Hallo Werner, Du machst Dir unnötig Arbeit. Du brauchst hier nichts kopieren, sondern lediglich erweiterte Funktionen für flash.c2, um Deinen eigenen Datentyp direkt speichern zu können: Versuche einfach folgendes: type gpsDaten {// Länge: 5x32Byte =160Byte string breiteB; string breite; string laengeL; string laenge; string name; } inline function writegpsDaten (byte segment, int addr, gpsDaten data, int len) returns int { inline vmcodes.VM_INLINE_SYSCALL+flash.Segment; inline flash._WRBYTEARR; } inline function readgpsDaten (byte segment, int addr, gpsDaten data, int len) { inline vmcodes.VM_INLINE_SYSCALL+flash.Segment; inline flash._RDBYTEARR; } gpsDaten location[15]; thread main { //... writegpsDaten(1, 0, location[0], 160); writegpsDaten(1, 160, location[1], 160); readgpsDaten(1, 0, location[15], 160); //... } Als Länge mu� hier immer die Grö�e eines Arrays(=5Strings) angegeben werden. Hier sind das 160Byte. Wenn Du den gesamten Inhalt von location[] in den Flash schreiben willst, geht das auch sehr einfach, und ohne For-Schleife. ;-) type gpsDaten {// Länge: 5x32Byte =160Byte string breiteB; string breite; string laengeL; string laenge; string name; } inline function writegpsDatenArray (byte segment, int addr, gpsDaten data[], int len) returns int { inline vmcodes.VM_INLINE_SYSCALL+flash.Segment; inline flash._WRBYTEARR; } inline function readgpsDatenArray (byte segment, int addr, gpsDaten data[], int len) { inline vmcodes.VM_INLINE_SYSCALL+flash.Segment; inline flash._RDBYTEARR; } gpsDaten location[15]; thread main { //... writegpsDatenArray(1, 0, location, 160*15); readgpsDatenArray(1, 0, location, 160*15); //... } Die Grö�e besteht hier aus 160Byte der 5 Strings mal der Anzahl der location-Elemente. Wenn Du Dir die Längenangaben sparen bzw. vereinfachen willst, kannst Du einfach entsprechende Funktoinen zwischenschalten: function flashWrGPSDaten (byte segment, int addr, gpsDaten data) returns int { return writegpsDaten(segment, addr, data, 160); } function flashRdGPSDaten (byte segment, int addr, gpsDaten data) returns int { return readgpsDaten(segment, addr, data, 160); } function flashWrGPSDatenArray (byte segment, int addr, gpsDaten data[], int len) returns int { return writegpsDatenArray(segment, addr, data, 160*len); } function flashRdGPSDatenArray (byte segment, int addr, gpsDaten data[], int len) returns int { return readgpsDatenArray(segment, addr, data, 160*len); } Beachte aber beim Flash immer, da� dieser nur Segmentweise gelöscht werden kann! Ein �berschreiben bereits vorhandener Werte ergibt eine "nette" Datenverknüpfung. So etwas kann man an Hand der Rückgabewerte der Schreibfunktionen erkennen. (Es wird false zurückgegeben.) MfG André H. > sorry, ist schon spät, > nicht midString, sondern strx.insert ist die Zauber-Routine. > Gute Nacht > Werner > > > Hallo nochmal, > > also ins Flash schreiben ging gut. Mit dem Auslesen war es schwieriger. Die Ausgabe auf mein Tochlcd funktionierte gleich, > > aber um die Daten auf das lcdext zu bekommen und um die Daten weiter zu bearbeiten, > > mu�ten die byteBuf[]-Daten wieder in ein String umgewandelt werden. > > Mit flash.readStringArray bekam ich auch die abgespeicherten Werte ab einer bestimmten Position > > aufs extLCD, aber ich konnte nicht die Länge bestimmen. > > Und an dem Versuch, es gleich als StringArray abzuspeichern, bin ich kläglich gescheitert. > > Falls das jemand geschaft hat, täte mich ein kleines Beispiel interessieren. > > > > Wie dem auch sei, mit der Zauber-Routine von midString gelang es mir dann byte buf[] in String umzuwandeln. > > Falls jemand eine konventionelle Lösung hat...Bin ich daran interessiert. > > > > > > //Flash lesen > > zeile=0; > > lcdext.clear(); > > touchlcd.clear(); > > for k=1 ... 10 > > { > > str.clear(s); > > flash.readByteArray(1,k*64,buf,64); > > //mem.copy(s,0,buf[35],20); //funktioniert leider nicht > > strx.insert(buf[35],s,0,20);//geht doch, byte[] in string > > lcdext.delline(1); > > lcdext.line(1); > > lcdext.print(s); > > lcdext.delline(2); > > lcdext.line(2); > > lcdext.zahl3(str.length(s)); > > touchlcd.text('L',0,zeile,buf[35],20); > > zeile=zeile+6; > > sleep 3000; > > } > > > > mfg > > Werner > > > > > Hey Martin, > > > dann klon ich eben �pfel und Birnen. Ich möchte Datensätze die grö�er sind als 30 Byte abspeichern. > > > Aber dank eines Beitrages vom April 2003 in diesem Forum über mem.copy, habe ich die Lösung gefunden. > > > Bin gerade am ausprobieren.Sieht aber gut aus. Anbei der Zaubercode! > > > > > > //irgendwo am Anfang > > > byte buf[64]; > > > > > > //Flash beschreiben > > > for k=2 ... 11 > > > { > > > mem.fill(buf,64,32); > > > mem.copy(buf,0,location[k].breiteB,1); > > > mem.copy(buf,1,location[k].breite,11); > > > mem.copy(buf,12,location[k].laengeL,1); > > > mem.copy(buf,13,location[k].laenge,12); > > > mem.copy(buf,25,location[k].datum,10); > > > l=str.length(location[k].name); > > > mem.copy(buf,35,location[k].name,l); > > > lcdext.line(1); > > > lcdext.zahl(flash.writeByteArray(1,k*64,buf,64)); > > > } > > > lcdext.line(2); > > > lcdext.print("Erledigt"); > > > > > > Aber trotzdem vielen Dank für deine Antwort. > > > > > > Ein glücklicher Werner. > > > > > > > Hallo Werner > > > > > > > > Du versuchst gerade �pfel auf Birnen zu Klonen ;) > > > > ein String benötigt unabhängig von seiner Länge immer 32 Byte! > > > > Strings kannst du mit der Funktion Flash.writeString() direkt in den Flash schreiben, > > > > dabei musst du beachten da� du mit 32 er Schritten Addressierst. > > > > Siehe Modulhilfe Flash.HTML. > > > > > > > > Gru� Martin > > > > > > > > > > > > > Hallo zusammen, > > > > > ich möchte mehrere Strings in ein byte[] Array schreiben, um es dann in den Flash-Speicher zu speichern. > > > > > Hier meine definition: > > > > > > > > > > type gpsDaten > > > > > { > > > > > string breiteB; > > > > > string breite; > > > > > string laengeL; > > > > > string laenge; > > > > > string name; > > > > > } > > > > > > > > > > gpsDaten location[15]; > > > > > > > > > > byte buf[64]={location[x].breiteB,location[x].breite,location[x].laengeL,location[x].laenge,location[x].name}; > > > > > > > > > > Aber irgendwie gelingt mir das nicht. Was mache ich verkehrt? Wie bekomme ich die Daten in buf? > > > > > > > > > > mfg > > > > > Werner > > > > > > > > > > > > > > > Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: wie bekomme ich den string in ein Byte[] (von wernerAZ - 30.03.2007 13:55) Re: wie bekomme ich den string in ein Byte[] (von André H. - 9.04.2007 19:19) |