Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

26.06.2007, 12:44

sehr merkwürdig irgendwie, schön langsam glaub ich, dass vl der standard windows editor den unicode falsch abspeichert :P

also hier die testtextdatei


Zitat

╔╔


die 2 zeichen sollten also ausgegeben werden


hier mein code

C-/C++-Quelltext

1
2
3
4
5
6
7
FILE* Map = fopen("Map.txt", "r");
    wint_t i;
    while(!feof(Map))
    {
        i = fgetwc(Map);
        std::cout << (char)i << std::endl;
    }


und die konsolenausgabe ist

Zitat

T%T%


hab schon versucht mir readbinary und gecaste auf höchster ebene :P

sieht wer worans liegen könnte? ich ned :( denn fgetwc liefert ja den unicode value, der dann in char gecastet werden soll, denn (char)201 ist das ziehcne in der textdatei(oder 205, irgendein 20x jedenfalls). jedoch kommen die falschen zahlen rein :(

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

22

26.06.2007, 12:55

Zeigmal nen Hexdump von der Textdatei.
@D13_Dreinig

23

26.06.2007, 13:12

meinst die zahlen die ausgegeben werden oder die hexadezimaldarstellung der ausgabe? wenn zweiteres: wie mach ich das? modulo16 rechnen und ausgeben?

wenn ersteres:

255
254
84
37
84
37
65535

edit: ah glaub du meintest was anderes, geht das mit winxp überhaupt?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

24

26.06.2007, 13:14

Schau mal folgendes an:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    FILE* Map;
    Map = _wfopen(L"test.txt", L"rb");

    wchar_t c;
    while((c = fgetwc(Map)) != WEOF)
    {
        if (c<256)
            std::wcout << c;
        Sleep(200);
    }
    fclose(Map);


die if-Abfrage ist, damit die ersten Bytes, die UNICODE einleiten nicht berücksichtigt werden.


http://hexedit.nextsoft.de/

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

25

26.06.2007, 13:14

Nimm doch einen der 5 Millionen Hexeditoren dies gibt! ;-)
@D13_Dreinig

26

26.06.2007, 13:24

Zitat

FFFE 5425 5425
ÿþT%T%


das is die hexausgabe :D


@grek: bei binäreinlesen, sind die zahlen bei ca 9k :D da gibt er dann gar nix mehr aus, aber wenn ich wieder normal einlese als r statt rb , dann ist wieder ausgabe T%T%

edit: liegt das vl an microsoft visual autoren edition?

edit2: k liegt anscheinend wirklich an dem,dass die codierung falsch abgespeichert wird, aber kA wie ich das machen kann :(

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

27

26.06.2007, 15:13

Wie kommst du eigentlich auf die bescheuerte Idee, bei binären Daten mit UNICODE zu hantieren? UNICODE ist doch letztendlich ein Zeichensatz, was soll das also binär werden?

Es wär glaub ich echt das beste, wenn du nochmal genau schilderst, was du willst/erwartest etc... ich glaube das die ganze Diskussion grad bisschen am Problem vorbei geht.

// Ich hab soeben FFFE 5425 5425 in meinen Hexeditor gehackt und eigentlich ist die Zeichenfolge die du bekommst korrekt^^ FFFE ist die 'Signatur' für UNICODE und dann kommt der Rest.

Du solltest wenn es dir um das Zeichen geht mal lieber nicht die 0x5425 sondern die 0xC9 nehmen, denn ╔ = 201 (dez) und lässt sich so auch mit cout ausgeben ;)

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

28

26.06.2007, 15:28

Hab mal bisschen weite geforstet, wenn es unbedingt dieser Binärcode für dieses Zeichen sein soll dann schau ma das an:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    FILE* Map;
    Map = _wfopen(L"Map.txt", L"rb");

    wchar_t c;
    DWORD test;
    c = fgetwc(Map); // Byteorder überspringen

    while((c = fgetwc(Map)) != WEOF)
    {
        if (! WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), &c, 1, &test, 0))
            return -1;
        Sleep(200);
    }
    fclose(Map);

29

26.06.2007, 16:27

Zitat

Du solltest wenn es dir um das Zeichen geht mal lieber nicht die 0x5425 sondern die 0xC9 nehmen, denn ╔ = 201 (dez) und lässt sich so auch mit cout ausgeben Wink


das man das normal mit cout ausgeben kann ist mir ja klar und das will ich ja auch^^

also nochmal zum problem:

ich importiere konsolen "maps" (kleine kartne für spiele sozusagen) mittels textdateien und früher hatt eich eben unschöne varianten, z.b. solche



Zitat


78889
4GGG4
18883


und dann in der funktion extra überprüft:

Zitat

wenn das gelesen zeichen eine 7 ist dann "zeichne" das unicodesymbol ╔ für 8 zeichen ═ usw..


das das sehr umständlich ist und mit der zeit auch bischen verwirrend, bei dem "textschreiben der maps" wenn ich für die unterschiedlichen "waende" zahlen verwende.

deswegen wollte ich jetzt einfach schon in die textdatei folgendes reinschreiben

Zitat


╔══╗
║GG║
╚══╝


und einfach einlesen. und genau da liegt mein problem, dass er eben die zeichen so komische einlist mit dem T%T% etc.

hoffe jetzt ist verständlicher was ich will^^

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

30

26.06.2007, 18:30

Da musste meines erachtens weg von den Streams hin zu WriteConsoleW (...) -> siehe oben

Werbeanzeige