2011-04-10 13 views
9

HI, Java'dan C# ye geçiyorum. HEX'te IO kullanarak bir dosyada okumaya çalışıyorum. İlk baytı okuduğumda, Hex editörümde gördüğümü anlamadım. BenIO'yu kullanarak C# 'yı kullanarak hex'i okuyabilirsiniz.

kullandığım Java
StreamReader reader = new StreamReader(fileDirectory); 
int hexIn; 
String hex; 

for (int i = 0; (hexIn = reader.Read()) != -1; i++){ 
    hex = Convert.ToString(hexIn, 16); 
} 

kullanıyorum

...

FileInputStream fis = new FileInputStream(file); 
    long length = file.length(); 

    int hexIn; 
    String hex = ""; 

    for(int i = 0; (hexIn = fis.read()) != -1; i++){ 

     String s = Integer.toHexString(hexIn); 
     if(s.length() < 2){ 
      s = "0" + Integer.toHexString(hexIn); 
     } 

Bu mantıklı umuyoruz. Herhangi bir yardım en apperciated olacaktır :)

Teşekkür

+1

Ne beklediğinizle kıyaslıyorsunuz? –

+0

Merhaba, FFFD değil D0CF alıyorum, okunan FFFD, D0CF'nin ascii olduğunu görüyor, şaşkın şimdi ha ha – Pete

cevap

11

StreamReader'yu kullanmayın, bu sadece belirli bir kodlamadaki karakterler içindir (varsayılan UTF8). Bunun yerine bir FileStream sınıfını kullanın:

FileStream fs = new FileStream(fileDirectory, FileMode.Open); 
int hexIn; 
String hex; 

for (int i = 0; (hexIn = fs.ReadByte()) != -1; i++){ 
    hex = string.Format("{0:X2}", hexIn); 
} 
+0

Teşekkür ederim Mark, Ben okuma ve aklımda aldım Java'da benim expericance aksi halde olmasa da Stream okuyucu kullanmak zorunda kaldı. Ama teste tabi tutup test ettim, bunu okuyan herhangi biri bunu unutmayı unutma ... FileStream fs = new FileStream (fileDirectory, FileMode.Open); yok ise bir yaygaraya bürünüyorsa :) – Pete

+0

sadece not için başkalarının bunu kullanması durumunda bunu kullanmalısınız hexIn = fs.ReadByte(); yukarıda bir sonraki bayt okuyacak, sadece bana bir dakika ha hack aldım ha ha – Pete

+0

ben düzeltildi; Teşekkürler. –

0

Sen Java kodu olarak aynı sonuçları elde etmek böyle C# kodu gerekir:

hex = hexIn.ToString("X").PadLeft(2, '0'); 

Convert.ToString da çalışır, ancak IMO yerli ToString kullanarak Tamsayı daha iyi bir uygulamadır.
Neyse, 0F yerine 'f' değerinin 15 olmasına neden olan PadLeft bölümünü kaçırdınız.

+0

Yine de bir tamsayı okuyor musunuz? Belgelere göre, StreamReader.Read() yöntemi bir ASCII değeri döndürür. Bu büyük olasılıkla onaltılık editöründen aynı sonuçları almıyor olması. – JackMc

+0

@Jack'in her karakteri ASCII değeriyle temsil edilir, HEX sadece farklı bir temeldir, ancak tam olarak aynı şeydir. ASCII kodu 15 ile karakter, HEX'te "0F" olarak gösterilebilir ve hex editörlerinin gösterdiği şey budur, ancak kapağın ardında aynı şeydir. :-) –

+0

@Shadow Wizard: Oops ... Tamsayılarda okumaya çalıştığını sanıyordum :). Üzgünüm, cevap silme: P. – JackMc