Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Byte nach Integer
PacMani
Unregistered

 
Beitrag #1
Byte nach Integer
VB.Net :D
Sorry. Hab schon gegoogelt aber nichts gefunden.
Ich lese derzeit eine Datei Byte für Byte aus, und muss deren Werte in Integer umformen damit ich sie in NumericUpDown-Controls als Value einfügen kann.
Also FF wird zu 255, 00 zu 0 etc.

Um etwas genauer zu werden, möchte ich ein Worms-Schema einlesen, welches bestimmte Spieleinstellungen speichert. Das sieht ungefähr so aus (mehr Infos stehen noch auf http://worms2d.info/Game_scheme_file ) :
[Bild: wormshex.png]
Also erst der Header, dann die Version, welche ich derzeit noch getrost überspringe (da ich nur die gespeicherten Einstellungen verarbeiten will, die danach kommen).
Als erste Einstellungen folgt Zeit vor Zug (TBT), welche in diesem Scheme glücklicherweise bei nur 5 Sekunden liegt (also Hex-Wert 5). Das kann ich problemlos auslesen. Bei einigen Schemen ist diese Einstellungen allerdings bei 255 Sekunden, also FF. Das kann ich nicht auslesen, weil mir der StreamReader.Read() 65535 zurückgibt, als ob dort FF FF stehen würde, wenn ich das richtig sehe. Und da liegt mein Problem. ReadByte habe ich gesucht, aber sowas nicht gefunden.
09.10.2009 22:02
Diese Nachricht in einer Antwort zitieren
YAL Offline
teplotaxi

Beiträge: 2.493
Registriert seit: Jul 2008
Beitrag #2
Byte nach Integer
Welche Programmiersprache.
0xFF ist nur die Darstellung der Dezimalzahl 255, da sollte nicht das Problem liegen.
In c :
Code:
char euda = 0xff;
int wtf = (int) euda;


09.10.2009 23:01
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #3
Byte nach Integer
sorry hab vergessen VB.Net zu erwähnen, da geht das ja so nich^^
10.10.2009 01:26
Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #4
Byte nach Integer
Gesetzt den Fall, du willst wirklich folgendes tun (ist exakt YALs Beispiel, nur anders geschrieben):
Code:
char euda = 255;
int wtf = (int) euda;
Obwohl das (int) bei C eigentlich überflüssig ist, weil implizit.

Das nennt man ja Typecasting. Was ich bei Google gefunden hat, geht das da eigentlich bei VVB.NET auch implizit, ansonsten schau mal hier:
Developer: VB.NET - CType & DirectCast

Wobei ich ehrlich gesagt nicht ganz sicher bin, ob du wirklich danach fragst.
10.10.2009 11:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #5
Byte nach Integer
Ich bin selbst durcheinander. Benutze derzeit einen StreamReader, um an die Daten zu kommen. Der liest die Zeichen allerdings so aus, dass er sie als Strings zurückgibt. Demnach könnte ich die Strings in ein Charfeld aufspalten und dann aus den benötigten Chars die Hexcodes auslesen. Fürs letzte fehlt mir aber eine Funktion :(
10.10.2009 12:49
Diese Nachricht in einer Antwort zitieren
YAL Offline
teplotaxi

Beiträge: 2.493
Registriert seit: Jul 2008
Beitrag #6
Byte nach Integer
Also gehts dir um die hexadezimale Darstellung einer Zahl???


10.10.2009 12:51
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #7
Byte nach Integer
Bei den meisten Sprachen gibts beim den Funktionen, die Dateien einlesen nicht nur die Möglichkeit, dass Linien- oder Blockweise, sondern auch Zeichenweise einzulesen? Schon mal die Funktionsübersicht von StreamReader angeschaut? Selbst ohne Plan von VB.NET würde ich darauf wetten, dass es da ne Funktion gibt, die dir den Stream Zeichen für Zeichen rückgibt.

Nachtrag: Ja, StreamReader.Read () liest dir Zeichen für Zeichen ein.
10.10.2009 12:53
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #8
Byte nach Integer
Den benutze ich ja ;) aber der gibt mir bei FF immer 65535 zurück, aber ich erwarte 255.
Also, um etwas genauer zu werden, möchte ich ein Worms-Schema einlesen, welches bestimmte Spieleinstellungen speichert. Das sieht ungefähr so aus (mehr Infos stehen noch auf http://worms2d.info/Game_scheme_file ) :
[Bild: wormshex.png]

Also erst der Header, dann die Version, welche ich derzeit noch getrost überspringe (da ich nur die gespeicherten Einstellungen verarbeiten will, die danach kommen).
Als erste Einstellungen folgt Zeit vor Zug (TBT), welche in diesem Scheme glücklicherweise bei nur 5 Sekunden liegt (also Hex-Wert 5). Das kann ich problemlos auslesen. Bei einigen Schemen ist diese Einstellungen allerdings bei 255 Sekunden, also FF. Das kann ich nicht auslesen, weil mir der StreamReader.Read() 65535 zurückgibt, als ob dort FF FF stehen würde, wenn ich das richtig sehe. Und da liegt mein Problem. ReadByte habe ich gesucht, aber sowas nicht gefunden.
10.10.2009 15:23
Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #9
Byte nach Integer
Hm. Stimmt, StreamReader.Read() gibt nen 32Bit-Integer zurück gemäss Dokumentation - was offenbar daran liegt, weil man bei StreamReader einen Zeichensatz einstellen kann und so z.B. Unicode einlesen kann.

Hast du schon einmal probiert, das Encoding von StreamReader zu verändern?
Ich hab zwar jetzt grad nicht rausgefunden, was der Standardwert ist, aber probier doch mal StreamReader mit ASCII als Encoding zu initialisieren:

Gemäss: http://msdn.microsoft.com/de-de/library/...80%29.aspx
New StreamReader("C:\Temp\Test.txt", System.Text.Encoding.ASCII)


-----------

Nachtrag: Moment. ASCII ist ja nur 7Bit, das wird mit 0xFF ebenfalls wenig anfangen können. Scheint aber so, dass StreamReader nur für Strings, und nicht für Binärdaten (wie hier) gemacht ist. Schau dir mal BinaryReader an:

http://msdn.microsoft.com/en-us/library/...dbyte.aspx
10.10.2009 15:39
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #10
Byte nach Integer
Dankeee x)
funktioniert prima! Wenn noch was ist (ob es bei unsignierten Bytes Probleme gibt?), meld ich mich.
10.10.2009 17:16
Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste