2009-02-12 22 views
6

इस बिंदु ज्यादातर लोगों सोच किया जाएगा "आह बीमार पोस्ट इस ..:"सी # अपने बाइट में स्ट्रिंग परिवर्तित [] बराबर

byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data); 

हालांकि .. समस्या मेरे पास है मैं का सही मूल्य की जरूरत है प्रत्येक बाइट के लिए केवल शुद्ध मूल्य वाले एन्कोडिंग वाले बाइट्स। उदाहरण के लिए यदि स्ट्रिंग का मान (0xFF32) है, तो मैं इसे भी {255,50} रूपांतरित करना चाहता हूं। इसका कारण यह है कि मेरे पास एक फ़ाइल प्रारूप है जिसे मैं पढ़ने की कोशिश कर रहा हूं कि कौन सा स्टोर्स int को बाइट्स के रूप में सहेजता है और प्रोग्राम खोलता है तो उन्हें पढ़ता है।

... 
dialog.InitialDirectory = 
    Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + 
    "/Test"; 

dialog.Title="Open File"; 

if (dialog.ShowDialog(this) == DialogResult.OK) 
{ 
    StreamReader reader = new StreamReader(dialog.FileName); 
    string data = reader.ReadToEnd(); 
    reader.Close(); 
    byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data); 
    File_Read(dialog.FileName,fileC); 
} 
... 

तो जब मैं कोशिश करते हैं और फ़ाइल यह फ़ाइल कॉन्वेंट धर्मान्तरित पढ़ 0x3F में 0xFF कहना क्योंकि 0xFF अधिक से अधिक तो 127 और 0x3F एक है:

यह वही है मैं अब तक किया है?।

क्षमा अगर मैं थोड़ा अजीब लग :)

धन्यवाद, माइकल

उत्तर

18

समस्या शुरू करने के लिए के साथ अपने दृष्टिकोण के साथ है:

मैं कोई एन्कोडिंग

साथ बाइट्स की सही मूल्य की जरूरत है ...

उदाहरण के लिए

यदि स्ट्रिंग का मूल्य है (0xFF32)

कि एक तेल पेंटिंग देख रही है और कह रही है, की तरह एक सा "मुझे कोई एन्कोडिंग के साथ कि तस्वीर के लिए बाइट्स चाहते हैं।" यह समझ में नहीं आता है। पाठ बाइनरी डेटा के समान नहीं है। एक बार जब आप इसे समझ लेंगे, तो समस्या की जड़ तक पहुंचना आसान है। आप वास्तव में क्या चाहते हैं फ़ाइल की बाइट सरणी के रूप में सामग्री है। यह आसान है, क्योंकि फाइल बाइनरी डेटा हैं! यदि आप वास्तव में पाठ नहीं हैं तो आपको इसे पहले स्थान पर पाठ के रूप में नहीं पढ़ना चाहिए। सौभाग्य से, नेट यह वास्तव में आसान बनाता है:

byte[] fileC = File.ReadAllBytes(dialog.FileName); 
+0

मैं समझता हूं कि कैसे फ़ाइलें बिट बाइट्स और सभी जो काम करते हैं, यही कारण है कि मैं भंडारण को समझने में सक्षम हूं (उदाहरण के लिए) एक 64-बिट पूर्णांक 8 बाइट्स के रूप में मुझे पता नहीं था कि कैसे प्राप्त करें जानकारी पर :); आपकी मदद के लिए thansk – redorkulated

+1

लेकिन एक फाइल का इलाज करना जैसे कि इसमें टेक्स्ट होता है जब यह एक मौलिक गलतफहमी नहीं है जो * इतने सारे लोगों को जलता है। जब भी आप "एन्कोडिंग के बिना बाइट्स के रूप में एक स्ट्रिंग की सामग्री" के बारे में सोचना शुरू करते हैं, तो लगभग निश्चित रूप से इसका मतलब है कि एक बग गुप्त है। –

+0

मैं इस उदाहरण में पाठ के रूप में "स्ट्रिंग" को नहीं देख रहा था, इसलिए मैं शुद्ध बाइनरी प्राप्त करने की कोशिश कर रहा था, क्योंकि फ़ाइल संग्रहित हो रही है। मैं आपकी बात समझता हूं हालांकि धन्यवाद :) – redorkulated

4

उपयोग एक BinaryReader

+0

में बीमार लग रहे करने के लिए एक बाइट सरणी में कनवर्ट यह; धन्यवाद! – redorkulated

12

हालांकि .. मेरी समस्या यह है कि मुझे बाइट्स के सटीक मान की आवश्यकता है, जिसमें प्रत्येक बाइट के लिए केवल शुद्ध मूल्य नहीं है।

फिर इस का उपयोग करें:

byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data); 

यह रूप में नेट तार द्वारा आंतरिक रूप से संग्रहीत बाइट्स देता है।

लेकिन यह सब कोडसवॉल है: एक स्ट्रिंग हमेशा किसी विशेष एन्कोडिंग से जुड़ा हुआ है और इसके आसपास कोई रास्ता नहीं है। उपरोक्त विफल हो जाएगा उदा। अगर फ़ाइल में अमान्य यूनिकोड कोड अनुक्रम (जो हो सकता है) या सामान्यीकरण के माध्यम से है। चूंकि आप स्पष्ट रूप से string चाहते हैं, तो एक को न पढ़ें। फ़ाइल को इसके बजाय बाइनरी डेटा के रूप में पढ़ें।

1

यदि आप बाइट्स चाहते हैं, तो स्ट्रीम का उपयोग करें!

पृथ्वी पर क्यों आप टेक्स्ट रीडर के साथ गड़बड़ कर रहे हैं?

संपादित करें:

अपने उदाहरण के अनुसार, आप किसी फ़ाइल को खोल रहे हैं, तो सिर्फ एक FileStream का उपयोग करें।

+1

हे, मैं वास्तव में सी # के लिए नया हूं, फाइलों को पढ़ने के लिए एक उदाहरण मिला है और जो मैंने एक साथ जोड़ा है: पी। यह नहीं पता था कि फ़ाइलों को किसी अन्य तरीके से पढ़ा जा सकता है :) – redorkulated

3

स्ट्रिंग से क्यों परिवर्तित करें? क्या आप फ़ाइल की सामग्री को सीधे बाइट्स में नहीं पढ़ सकते थे?

byte[] fileC = File.ReadAllBytes(dialog.FileName); 
11

// एक बाइट सरणी के लिए एक स्ट्रिंग परिवर्तित

public static byte[] StrToByteArray(string str) 
{ 
    System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding(); 
    return encoding.GetBytes(str); 
} 

// एक स्ट्रिंग

public string ByteArrayToStr(byte [] dBytes) 
{ 
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
return enc.GetString(dBytes); 
} 
संबंधित मुद्दे