Binärdatein lesen!

adilosch

Grünschnabel
Hallo,

Ich habe hier versucht:
Erste Zeile im Textdatein lesen (in Hex.)
Sollte hier FFFE (weil die textdatei Unicode ist)sein! Aber hier lese ich als Dezimal (255)! Wie kann ich die erste Zeile als FFFE lesen nicht als Dezimal (255).Ich bedanke mich für die Hilfe sehr!

FileStream datei= new FileStream("C:\\text1.txt",FileMode.Open);
BinaryReader r= new BinaryReader(datei);
ArrayList al = new ArrayList();
byte [] newArray = new byte[2];
byte s;

for(int i=0;i<newArray.Length;++i)
{
s = r.ReadByte();
al.Add(s);

if (s==(255))
{
MessageBox.Show("Unicode");
}
else
{
MessageBox.Show("Not Unicode");
}
}
r.Close();
 
Hallo.

Ein Hexa-Zeichen sind 4 Bit, also sind 2 Hexzeichen gleich 1 Byte. Maximalwert (unsigned) ist also 255. FFFE, 4 Hexzeichen, 2 Byte, also, auch 2 Byte einlesen was du ja auch tust, und dann auch beide Zeichen vergleichen.

Kannst aber auch in einer Zahl zusammenfassen.

Code:
bool isFFFE = false;

using (BinaryReader r= new BinaryReader(new FileStream("C:\\text1.txt",FileMode.Open)))
{
  int tempValue = r.ReadByte();
  tempValue = tempValue << 4;
  tempValue = tempValue & r.ReadByte();
  
  if (tempValue == 65534) // 65534 == FFFE
    isFFFE = true;
}

MfG,
Alex

MfG,
Alex
 
Hallo Alex,

Danke für Hilfe!
Ich lese irgendwie letzte tempValue wert 240, Ich komme nicht auf 65534!
Das war auch meine Problem! Irgendwas läuft falsch!
 
Hallo Alex,

Ich habe die Problem so gelöst!

int tempValue = r.ReadByte();
tempValue = tempValue << 8;
int tempValue1 = r.ReadByte();
tempValue = tempValue + tempValue1;

if (tempValue == 65534) // 65534 == FFFE
{
MessageBox.Show("Unicode");
}
 
int tempValue1 = r.ReadByte();
tempValue = tempValue + tempValue1;

Damit ist auch okay oder?

Du hast mir sehr geholfen! Vielen vielen Dank
 
Nein, ists nicht. Es würde schon funktionieren, nur musst du dann auf einen anderen Wert überprüfen, zu diesem würdest aber auch durch andere Zahlenkombinationen kommen, also ists ungenau.

Das was mein (ausgebesserter, also mit der 8 statt der 4) Code macht ist folgendes.
Er liest das erste Byte in eine Variable, schiebt das ganze nach links, und schreibt danach hinten nochmal das nächste Byte rein. Jetzt hast ne 2 bittige Zahl gelesen.

Hab aber gerade nen Fehler bemerkt.
Es gehört mit OR verknüpft und nicht mit AND.

Sorry, war da echt schon im Stress.

Code:
bool isFFFE = false;

using (BinaryReader r= new BinaryReader(new FileStream("C:\\text1.txt",FileMode.Open)))
{
  int tempValue = r.ReadByte();
  tempValue = tempValue << 8;
  tempValue = tempValue | r.ReadByte();
  
  if (tempValue == 65534) // 65534 == FFFE
    isFFFE = true;
}
 

Neue Beiträge

Zurück