Zum Inhalt springen

Shamharoth

Mitglieder
  • Gesamte Inhalte

    59
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Shamharoth

  1. Hallo zusammen, ich möchte mich bezüglich QRcode / PNG etwas weiterbilden und habe auch eine kleine lib für Linux gefunden hierfür: librqencode. Damit kann ich recht einfach mir QRcode - Barcodes erzeugen lassen. Nach kurzer Suche im Inet habe ich gleich noch den Sourcecode eines Programmes gefunden, das die lib benutzt und mithilfe libng das Ergebnis als eine PNG-Datei schreibt: qrenc_8c-source. ich habe mir für das Speichern die Funktion "writePNG" kopiert und für meine Tests etwas angepasst. Nun würde ich gerne das PNG-Bild nicht als Datei speichern, sondern das Ergebnis erst einmal in eine Zeichenkette als Buffer wegkopieren. Leider habe ich aktuell keine Möglichkeit gefunden dies hinzubekommen. Hat hier jemand eine Idee? Danke im voraus Sham.
  2. funktionieren sollte es, wenn du eine virtuelle (?) Methode in der Elternklasse schreibst und diese dann in der Kindklasse überschreibst. So würde ich es wenn dann machen. Da ich seit längerem nicht mehr so intensiv mit Vererbung gearbeitet habe muss ich sagen: Alles ohne Gewehr (*Peng*)! edit: ghaa nich gesehen, dass das Thema schon a Monat alt is >_<'
  3. Da wenn dann vom gleichen Bereich nur gelesen wird, brauch ich doch keine Synchronisation, oder? So wie ich es verstanden hab brauch ich Synchronisation nur dann wenn z.B. 2 Threads das gleiche Element zur gleichen Zeit bearbeiten wollen. Bei mir ist durch die Zuweisung zu einem Thread eine eindeutige Zuordnung. Ist das überhaupt sinnig einem Thread pointer auf die entsprechenden Vectoren zu übergeben? Es gibt ja verschieden Möglichkeiten zwischen Hauptprogramm und Threads Daten auszutauschen (Stichwort Shared Memory), jedoch sind die Daten, die verarbeitet werden unterschiedlich Groß, was Shared Memory ja unbrauchbar macht (Und es ist höchst warscheinlich 5 mal um die eck geguggd). Zum Beispielcode .. kann ich das jetzt nichtmehr Rekonstruieren. Anscheinend war Irgendwo a bug vorgestern drann. pthread_t ntid; int wert = 0; void *my_thread(void *arg) { for(int i = 0; i < 40; i++) { usleep(1000 * 200); printf("%d", i); wert+=100; } pthread_exit(NULL); } int main(void) { int err; err = pthread_create(&ntid, NULL, my_thread, NULL); if(err != 0) return 1; sleep(1); for(int abc = 0; abc < 8; abc++) { sleep(1); printf(" %d %d\n", abc,wert); } return 0; } Jetzt funktioniert das Beispiel (Wegen den Variablendefinitionen nich wundern. In Testprogrammen nehm ich immer seltsame Namen für Variablen).
  4. Zwar ist das Thema schon 10 Tage alt, trotzdem möcht ich mal mein Senf dazugeben ;D 1. if (iaktuellerspieler == 1) { stein == '1'; } if (iaktuellerspieler == 2) { stein == '2'; }[/PHP] Klar ist ja schon wbezgülich dem Vergleich (==) und der Zuweisung (=) Jedoch ist mir aufgefallen: stein ist doch int. warum gibst du ihm dann den ascii Wert von der Nummer? Ich rate dir das etwas einheitlicher zu machen: Mach am besten das ganze Brett als 2D-Chararray. Nur so reine Anregungen: Mach doch ein globales Array bezüglich Steinnummern: [PHP]char csteinspieler[2] = {'1','2'}; dann kannst du beim seitzen wie folgt machen: void ueberpruefeundsetze() { x = ieingabe; if ((ieingabe < 1) || (ieingabe > 7) || (ieingabe == 0)) //Eingabe�berpr�fung { printf("\nUngueltiger Zug.Bitte erneut eingeben!"); eingabe(); } for (y=6; y>0; y--) { if (iSpielfeld[x][y] == 0) //Das ist dafür da, dass der Stein auf die unterste Position im Array kommt, die mit einer 0 belegt ist. { // da so, die Spielregeln von 4 gewinnt ist. iSpielfeld[x][y] == csteinspieler[iaktuellerspieler-1]; system("cls"); zeigespielfeld(); } } gewinnabfrage(); }[/PHP] Weitere Anregung Warum gleich das ganze Array abprüfen? Überprüf doch einfach die 5 Möglichkeiten, die der aktuelle Stein "hervorruft"? So in etwa (mal dahingschreibselt ): [PHP]void gewinnabfrage() { //Prüfe alle X-Linie if(x > 2) { for(int i = 1; i < 4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x-i][y]) break; } igewinn = true; } if(x < 3) { for(int i = 1; i < 4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x+i][y]) break; } igewinn = true; } //Prüfe Y-Linie if(y < 4) { for(int i = y; i > x-4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x][i]) break; } igewinn = true; } //Prüfe Diagonalen if(y < 4 && x > 2) { for(int i = 1; i <= 3; i++) { if(iSpielfeld[x][y] != iSpielfeld[x-i][y-i]) break; } igewinn = true; } if(y < 4 && x < 3) { for(int i = 1; i <= 3; i++) { if(iSpielfeld[x][y] != iSpielfeld[x+i][x-i]) break; } igewinn = true; } } Kann Fehler haben aber auch weil ich das ma hingeklatschd hab. Alle Angaben ohne Gewehr (*PENG*)
  5. Hallo zusammen Momentan bin ich drann mit pthreads unter linux zu arbeiten. Dabei werden die Threads sozusagen als "Arbeiter" genutzt. Der Hauptprozess übergibt den Threads n Objekt mit nem pointer auf nen vector<string> in dem der zu bearbeitenden Inhalt steht, ein pointer vector<string> mit der id des threads, der den eintrag bearbeiten soll und dann noch die id des threads. Zudem noch paar andre Werte die jetz nur Zweitrangig sind. Der Hauptprozess selbst befüllt danach nur noch die Elemente und sagt welcher Thread sich kümmern soll. Sind alle Fächer belegt (Vorgabe max. 20 Fächer hab ich mir gesagt), soll ne Pause gemacht werde. Ähnlich sollen dann die Threads arbeiten. Sollen prüfen, ob ein Fach für Sie bereitsteht, wenn ja dann soll der Thread was machen, wenn nein soll er den Prozessor nicht unnötig belasten und soll ne Pause machen. Hier die Frage: sleep mud usleep (?) arbeiten ja threadabhängig (sleep wirkt sich nur auf den aktuellen Thread aus. Doch wenn ich Sleep im Hauptprozess nutze, werden da die andren Threads mit schlafen gelegt? Hab nämlich testhalber 'n Programm gemachd und dabei gab es das Problem, dass die Testausgabe anders ausgschaut hat als ich erhofft habe. Ich habe dabei ein Thread erstellt welches eine Schleife ausführt in dem insg. 5 mal Pause (sleep(1)) gemacht wird und danach eine Ausgabe. Das Gleiche sollte auch im Hauptprozessor passieren nur mit sleep(2), damit der Hauptprozess länger dauert . Nochmal insgesammt der grund für den Thread: Wirkt sich sleep dann nur auf Hauptprozess aus oder auch auf die Threads? Oder hab ich einfach n Fehler gemacht bei meinem Testprogramm? Danke im voraus
  6. gut na dann sag ich doch mal danke ^^ ich überleg mir mal ob ich es so in das projekt einbinden kann insgesammt war es eh eher nur eine optionale idee, damit es weniger fehler auftauchen könnten wenn es benutzt werden würde. darum nochmal ein danke an alle
  7. weils schöner aussieht Ne... Das is leider eine vorgabe vom Projekt
  8. *Mein Post noch mal durchles* K ich habs etwas ungenau geschrieben. Das mit den Klassen is auf die vordefinierte Variable bezogen Ansonste hätte ich sicherlich die gleiche Probleme wie bei Strukturen Also dass ich entsprechend der struktur, die übergeben wird eine entsprechende funktion schreib? Problem ist ja, dass daas Programm unter C laufen soll, kann eine Überladung nicht eingesetzt werden (deswegen void*) würde ich explizit für jede Art a funktion schreiben (mit entsprechenden funktionsnamen) ist bei der bibliothek nach aussen hin mehrere Funktionen sichtbar. Dies wollte ich jedoch vermeiden. Nach aussenhin gibt es nur eine Funktion, die aufgerufen werden kann.
  9. :upps k so wird also das ausgerechnet :/ da muss ich wohl nochmal wieder binärumrechnung anschaun ... (wissen etwas verstaubt)
  10. ou was mir grad noch auffällt: es ist ich das Ö sondern das ö! sry is mir grad erst aufgefallen >_<'
  11. wenn ich ganz blöd war hab ich falsch umgerechned ^^ ... ich hab einfach das charsymbol in int gecastet und die minuswerte *-1+127 (0-127 ist ja ASCII-bereich) gerechnet. somit hat man die wertigkeit 0-255 (Byte) / 00-FF ... un zwischen den system hab ich einfach KCalc genutzt ...
  12. hab bei mir über export geschaud und LANG is bei mir "en_US.UTF8". bezüglich der richtung (BE / LE) wird dies ja nicht bei UTF-8 Berücksichtigt, wodurch das auch nicht der grund sein sollte.
  13. gut evtl liegts an der firmenfunktion, da nämlich durch die aufgefüllte 0er er früher halt machd und zum schluss noch eine 1 in der inbuff-variable steht (sollte ja 0 stehen meines wissens). müsste für den fall wohl ne eigene kleine funktion baun, die dann das richtig machd. die konvertierung in widechar sollte hald für das vereifnachte vergleichen von strings mit zeichen (so z.b. abfrage ob '︾' im text steht (als banalstes beispiel, da dieser 3Bytes in UTF-8 verbrauchd). Mit MB is es ja schwieriger das zu vergleichen. was mir JETZT aufgefallen ist: die codierung der MB-zeichen ist anormal so z.B. das Ö: dieses Zeichen schaud so aus im MB-String: Jedoch aus versch. quellen hab ich erfahren, dass ein UTF-8-codiertes Zeichen bei solchen zeichen wiefolgt aussehen (binär):110XXXXX 10XXXXXX linux sollte doch eigentlich standartmäßig UTF-8 codierte konsolenein- und ausgaben haben ... zudem werden alle symbole richtig angezeigt (das "︾" habe ich aus ner UTF-8 Tabelle über Wiki kopiert)
  14. schad schad ..... das blöde man kann ja auch keine feste werte dem vorinitialisieren ... sonst hätte ich dem direkt ne "id" verpassd :/ würde ich die bib nur für C++ un nich noch für C schreiben, könnte ich klassen machen ... aba so :/... danke trotzdem ^^
  15. hallo zusammen. zur zeit schreib ich rechd viele fragen, aber mir fallen sachen ein, die ich nich brauch und mir fallen sachen nicht ein, die ich einfach brauch. situation: eine funktion hat n void-pointer. dieser wird je nach anlass zu nem struct gecastet (verschiedene). frage: ist es möglich neben prüfung ob dieser NULL ist auch das prüfen ob es die richtige struct ist? ansonsten kann man ja den größten blödsin casten ^^
  16. Ich find sowas sollte man im selbstversuch machen. GAAANZ früher (noch in der TAI-Ausbildung) haben wir unser Netz überprüft ob die eingesetzten Switchs (?) gut sind oder doch alles durchlassen. Darum mit meinen Erkenntnissen: Neben dem dauerversand an broadcast-meldungen gehören : - die immer langsam werdende Datenübertragung - fluchende Stimmen auf den FLuren - Störung von anderen Unterrichtsabläufen Ach ja das war noch ne Zeit :3 Ich wollt das nur mitteilen, da es ne recht offene Frage war ^^
  17. hab momentan ne gaaaaaaaaanz blöde idee (weshalb ich jetzt ma fragen müssd) ... alle MB-chars sind ja so codiert, dass diese (wenn man char in unsigned int umwandelt) >128 sind ... je nach anzahl der dazugehörigen Zeichen kann man auch sagen wieviele elemente zum MB-zeichen gehören. dann kann ich mit glück so machen, dass ich für den bereich, der den inhalt ändert, gar nicht in UTF32 umwandle und nur zur prüfung ohne änderung des eingabetextes das mach. .... somit hab ich kein problem mit der rückformatierung. .... etwas problematischer wird dann hald, dass ich z.b. MB-zeichen weglöschen muss .... sollte jedoch eifnacher sein als UTF32 in UTF8 zu konvertieren ;D .... muss nochmal überlegen ^^
  18. haha:) ich hab dein post gelesen und wollte mit deinem post als zitat antworten, aber in zwischenzeit hast etwas editiert. beim öffnen des editors hab ich mir gedacht "huch wo kommt plötzlich der satz her?" .. ach ja es lebe die zeit ^^ ... zum quote: hm verständlich .... k das bedeutet ich müssd mir a funktion suchen die das machd. ... für alphanumerische zeichen is es nich schlimm einfach die "0"-Bytes zu cutten ... jedoch will ich ja doch noch die anderen zeichen beibehalten warum gibt es keine standartfunktion die das machen kann? warum kann es iconv nicht? blödes iconv! *schachtel mit "iconv"-aufschrift tret* falls ich diesbezüglich a funktion gefunden hab, meld ich mich (es seidenn es kennt jemand die funktion schon.
  19. so ich hab mal 123abc in utf32 convertiert und als char ausgeben lassen. Dabei hab ich alle '\0' als [] angezeigt. ergebnis: (BOM ist noch dabei) bei abcü kommt jetz ist die frage: wenn ich alle 0 in viererblöcken lösch bis auf den aller letzten, ist dann noch gegeben, dass es richtig convertiert (dann is es ja genaugenommen a MB char array. Aber ob dies eine konforme "beschneidung" ist bezweifle ich irgendwie. Irgendwie MUSS ja UTF-32 nach "unten" konvertierbar sein. edit: ich hab mir mal schnell folgende funktion zusammengedacht: void * UTF32toUTF8(char *sString) { DWORD pos = 0; DWORD newpos = 0; while(1) { DWORD temppos = 0; if(sString[pos+temppos] == 0 && sString[pos+temppos+1] == 0 && sString[pos+temppos+2] == 0 && sString[pos+temppos+3] == 0) { sString[pos+temppos] = 0; break; } for(;temppos < 4; temppos++) { if(sString[pos+temppos] == 0) break; sString[newpos] = sString[pos+temppos]; newpos++; } pos+=4; } }
  20. ok ... mist :/ ... welche methode würdest du empfehlen? (wfwrite (oder ähnlich) gibts ja nur bei windows) un bei wfprint(ffile,L"%s", pwcstr); hat er bei mir nur den ersten byte geschrieben.) blöd is nur momentan ich kann ja auch wcstombs() nicht benutzen, da er bei den umlauten raushaut und -1 zurückgibt (ich glaub das hat ich schon am anfang des threads mit erwähnt).
  21. naja es is ja so: ich habe jetzt wchar_t string. den hab ich ja mit dem iconv befüllt, indem ich die source-zeichenkette in UTF-32 umcodiert habe. nun hab ich über fputwc in eine datei gespeichert. DIESE datei ist laut geany UTF-8 codiert (meint zumindest der statusbar). das war meine aussage ^^ (zudem hab ja gesagt, es gibt ja keine konvertierung von Textdateien in "WCHAR") K bezüglich des muss ich wohl a lösung finden. Das problem (wenn man das BOM-zeichen aussen vor lässt) was ich noch hab is dann noch die rückconvertierung in z.B. UTF-8 ... die funktion zur konvertierung bleibt bei mir in ner loop schleife hängen, welche erst rausgeht, wenn die länge des Inputs (3 parameter von der iconv_funktion. laut manpage "size_t *inbytesleft"). kann es sein, dass hier wegen der UTF-32 Codierung die richtige länge nicht erkennt wird bzw. durch die codierung auf 32bit für ein zeichen dies zu problemen führt? hab irgendwo (webseite) gesehen, dass durch die erweiterung hinter jedem zeichen dann ein "\0" stehen würd. ...
  22. das was gespeichert wird is ja UTF-8 (kenne keine datei, welche in WCHAR_T gespeichert ist (da es ja datentyp ist) das mit speichern ist ja eh nur zur prüfung gedacht. eigentlich wollt ich ja mit dem convertierten string ja weiterarbeiten. jedoch könnt ich einfach nach konvertierung wirklich das BOM-zeichen abschneiden Bezüglich des speicherleaks ist es dann angebrachd pcstr = pcstr+1 zu machen? ansonsten konvertier ich es sofort in wstring un entfern es dann darüber ...
  23. problem hierbei wäre dann aber, dass ich so a gschmarri rausbekomm: (bezüglich der zeile mit "std:.wcout << pwcstr....") der haut dann irgend ein 4Byte-Zeichen einfach vorne an. bezüglich speicherung hab ichjetzt statt fwrite fputws benutzt jetz bekomm ich auch a anständige utf8-codierte datei (laut geany). jedoch wurde das "ö" mit einem "?" (NICHT zeichen ->� ! nur ein normales "?") ausgetauscht.
  24. misd ich kanns nicht mehr editieren :/ darum n doppelpost von mir: ich hab etwas in ner manpage gefunden: so könnte evtl ein problem geben bei der rückkonvertierung geben (hab auch n fehler, da wennich dann fromWCHAR() mach, hüpfd er in ne endlosschleife. wenn ich dann den widechar von wchar_t in a multibyte char änder, fliegt er auch beim sonderzeichen raus. hier is aber das problem: es ist ja ne bibliothek und soll ja von verschiedenen programmen (egal des locals) genutzt werden. jetz die große frage: ist es möglich den local zu belassen? weil ansonsten müsste ja in derbibliothek das geändert werden, wodurch der rest des programmes beeinträchtigt werden könnte. die ganze problemstellung bereitet mir kopfzerbrechen ^^
  25. mein programm soll verschiedene typen prüfen (z.b. isd input numerisch oder alphanumerisch, das einfachste mal als beispiel). damit dann charset unabhängig ist und auch z.b. osteuropäische zeichensätze benutzt werden kann, sollte intern in UTF8 (bzw. eigentlich is es ja UTF32) laufen. k also bedeutet es, dass intern wennman "abcö" schreibt für "ö" n multibyte automatisch bekommt. ich hab jetzt n kleines prüfprogramm gemachd zum testen int main(void){ char cstr[40] = "abcö"; char *pcstr = cstr; wchar_t *pwcstr = NULL; FILE *ffile; std::cin >> cstr; std::cout << sizeof(cstr) << " / " << strlen(cstr) << " / " << mblen(cstr,500) << std::endl; pcstr = toWCHAR(pcstr,"ISO-8859-1"); std::cout << pcstr << std::endl; pwcstr = (wchar_t *)pcstr; std::wcout << pwcstr << wcslen(pwcstr) << std::endl; ffile = fopen("/.../test.txt","w"); fwrite(pwcstr,4,wcslen(pwcstr),ffile); fclose(ffile); return 0; } char * toWCHAR(char * sString, const char * from) { const char * to = "WCHAR_T"; return iconvert(sString, from, to); } char * fromWCHAR(char * sString, const char * to) { const char * from = "WCHAR_T"; return iconvert(sString, from, to); } hierbei bekomme ich bei "abcö" aufn bildschirm: und in die datei: sollte nicht dann wcslen 4 zurückgeben? weil bei "ööö" bekomme ich "6" zurück edit: ok wenn ich mein from - charset auf UTF8 ändere kommt schon mal richtige länge raus ...

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...