2011-04-10 13 views
9

HI, का उपयोग कर सी # में हेक्स पढ़ें, मैं जावा से सी # चलने के लिए नया हूं। हेक्स में आईओ का उपयोग कर फ़ाइल में पढ़ने की कोशिश कर रहा है। जब मैं पहली बाइट पढ़ता हूं तो मुझे अपने हेक्स संपादक में जो कुछ दिखाई दे रहा है वह नहीं मिलता है।आईओ

मैं

StreamReader reader = new StreamReader(fileDirectory); 
int hexIn; 
String hex; 

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

जावा में मैं इस्तेमाल किया उपयोग कर रहा हूँ ...

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); 
     } 

मैं इस समझ में आता है उम्मीद है। किसी भी मदद के सबसे apperciated की जाएगी :)

धन्यवाद

+1

क्या आप क्या उम्मीद कर रहे हैं की तुलना में कर रहे हैं? –

+0

हाय, मुझे एफएफएफडी नहीं मिल रहा है डी 0 सीएफ, ऐसा लगता है कि एफएफएफडी जो पढ़ा जा रहा है वह डी 0 सीएफ की एसीसी है, अब उलझन में है हा – Pete

उत्तर

11

StreamReader का उपयोग न करें - यह केवल एक निश्चित एन्कोडिंग (डिफ़ॉल्ट यूटीएफ 8) में वर्णों के लिए है। बजाय एक FileStream वर्ग का उपयोग करें:

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

उलझन में मिला, धन्यवाद, मैं कल पढ़ रहा था और इसे अपने सिर में मिला, मुझे स्ट्रीम रीडर का उपयोग करना पड़ा हालांकि जावा में मेरे प्रयोग ने अन्यथा कहा। लेकिन धन्यवाद परीक्षण और काम कर रहा है, किसी और को यह पढ़ने के लिए मत भूलना ... फ़ाइलस्ट्रीम fs = नया फ़ाइलस्ट्रीम (फ़ाइल डायरेक्टरी, FileMode.Open); क्योंकि यदि आप नहीं करते हैं तो यह एक झगड़ा उठाता है :) – Pete

+0

सिर्फ नोट के लिए अन्य लोगों का उपयोग करने के लिए आपको हेक्सइन = fs.ReadByte() का उपयोग करने की आवश्यकता है; ऊपर से यह अगले बाइट को पढ़ेगा, बस मुझे एक मिनट हा हा – Pete

+0

उलझन में मिला, मैंने इसे ठीक किया; धन्यवाद। –

0

आप अपने जावा कोड के रूप में एक ही परिणाम प्राप्त करने के लिए इस तरह के C# कोड की जरूरत है:

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

Convert.ToString भी काम करता है, लेकिन IMO देशी ToString का उपयोग कर पूर्णांक का बेहतर अभ्यास है।
वैसे भी आप PadLeft भाग खो रहे थे जो वास्तव में 0F के बजाय 15 'एफ' होने का कारण बनता था।

+0

हालांकि आप एक पूर्णांक में कैसे पढ़ते हैं? प्रलेखन के अनुसार, StreamReader.Read() विधि एक ASCII मान देता है। यही कारण है कि उन्हें अपने हेक्स संपादक के समान परिणाम क्यों नहीं मिल रहे हैं। – JackMc

+0

@ जैक प्रत्येक चरित्र को ASCII मान द्वारा दर्शाया जाता है, हेक्स सिर्फ अलग आधार है लेकिन यह वही बात है। ASCII कोड 15 के साथ कैरेक्टर को हेक्स में '0 एफ' के रूप में दर्शाया जा सकता है और हेक्स संपादक क्या दिखा रहे हैं, लेकिन हुड के पीछे यह वही बात है। :-) –

+0

@ छाया विज़ार्ड: ओह ... मैंने सोचा कि वह सिर्फ पूर्णांक में पढ़ने की कोशिश कर रहा था :)। क्षमा करें, उत्तर हटाने: पी। – JackMc