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 ) :

    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.

  • 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;
  • 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.

  • 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 :(

  • 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.

  • 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 ) :

    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.

  • 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/…28VS.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/…r.readbyte.aspx

  • Gibt es eigentlich eine Funktion zur richtigen Konvertierung von Boolean nach Byte?
    True ist ja standardmäßig 0 und False -1.
    Allerdings benötige ich True = 1 und False = 0.
    Derzeit löse ich das mit dieser Function:
    Private Function ByteConv(ByVal Value As Boolean)

    Code
    Private Function ByteConv(ByVal Value As Boolean)
            If Value = True Then
                Return 1
            Else
                Return 0
            End If
        End Function


    Redundanter Code wo es doch vielleicht was besseres gibt?

  • Klasse! Manchmal sollte auch ich suchen, wusste nur garnicht, wo ansetzen. Vermutlich kommt bald meine Frage wie man Null-Terminierte Pascalstrings in normale Strings umwandeln kann :D aber das brauch ich erst später.

  • Null-Terminierste Strings sind so eigentlich inzwischen der Standard bei praktisch allen Programmiersprachen. Dass man die Länge an den Anfang schreibt ist inzwischen eher selten, weil es halt nur selten Vorteile bringt und moderne CPUs extra Befehle für nullterminierte Strings haben.

    Wenn VB.NET nicht bereits intern ebenfalls das macht, wird es sicherlich mit Boardmitteln machbar sein.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!