मेरे पास टेक्स्ट फ़ाइल में एक हेक्साडेसिमल नंबर लिखा है। मुझे हेक्साडेसिमल संख्या के लिए अगर-और में स्थिति की जांच करने की आवश्यकता है। उदाहरण के लिए, टेक्स्ट फ़ाइल में लिखा प्रारंभ संख्या 1100 है और अंतिम संख्या 10FF है। प्रारंभ संख्या, ११०० १ के साथ अंतिम संख्या का जोड़ है। यह वृद्धि प्रक्रिया अन्य प्रणाली द्वारा की जाती है।

मेरे मामले में, सिस्टम टेक्स्ट फ़ाइल में संख्याओं को पढ़ने के बाद अगली प्रक्रिया के लिए आगे बढ़ेगा।

यह मेरा कोड है:

var data = File                 
.ReadAllLines(Path)                
.Select(x => x.Split('='))                 
.Where(x => x.Length > 1)                
.ToDictionary(x => x[0].Trim(), x => x[1]);       
    
Console.WriteLine("Start: {0}", data["Start"]);      
Console.WriteLine("End: {0}", data["End"]);      
    
if (data["Start"] == data["End"]+1)     
{    
      //it will proceed to next process     
}     
else     
{    
    //prompt not meet end number    
}   

समस्या यह है कि if (data["Start"] == data["End"]+1) काम नहीं कर रहा है। मैं इस समस्या को कैसे हल कर सकता हूं? क्या मुझे पहले हेक्साडेसिमल संख्या को int में बदलने की आवश्यकता है?

c#
0
ask99 9 नवम्बर 2020, 11:16

2 जवाब

सबसे बढ़िया उत्तर

सी # में यदि आप संख्या के साथ स्ट्रिंग को जोड़ते हैं, तो संख्या एक स्ट्रिंग में परिवर्तित हो जाएगी और मूल स्ट्रिंग के अंत में जोड़ दी जाएगी:

enter image description here

यदि आप अपने नंबरों पर कुछ गणित करना चाहते हैं, तो आपको पहले उन्हें सही डेटा प्रकार में बदलना होगा (आपके मामले में - पूर्णांक)।

ऐसा करने के लिए, आप इनमें से किसी एक आदेश का उपयोग कर सकते हैं:

if (Convert.ToInt32(data["Start"], 16) == Convert.ToInt32(data["End"], 16) + 1)

या

if (int.Parse(data["Start"], NumberStyles.HexNumber) == int.Parse(data["End"], NumberStyles.HexNumber) + 1)

वे आपकी स्ट्रिंग को परिवर्तित कर देंगे जिसमें हेक्साडेसिमल संख्या इस संख्या के दशमलव प्रतिनिधित्व में होगी, और फिर यह एक संख्या के रूप में व्यवहार करेगी (उदाहरण के लिए, उम्मीद के मुताबिक काम करेगा)।

0
Максим Кошевой 9 नवम्बर 2020, 11:50

"10FF" 0x10FF नहीं है।
सी# में, तथ्य यह है कि एक स्ट्रिंग में टेक्स्ट होता है जिसे हेक्सा-दशमलव संख्या (या उस मामले के लिए कोई भी संख्या) के रूप में पार्स किया जा सकता है, इसका मतलब यह नहीं है कि इसे उस संख्या में परोक्ष रूप से परिवर्तित किया जाएगा।
वास्तव में, यह दूसरा तरीका है - एक स्ट्रिंग और एक संख्या के बीच + ऑपरेटर का उपयोग करते समय c# परोक्ष रूप से संख्या को एक स्ट्रिंग में बदल देगा - इसलिए "10FF" + 1 का परिणाम "10FF1" होगा।

नोट मैंने इस लाइन को "इन सी#" से शुरू किया है - क्योंकि अन्य भाषाएं समान नियमों का पालन नहीं कर सकती हैं। उदाहरण के लिए, टी-एसक्यूएल में, वर्चर से इंट में निहित रूपांतरण हर समय होता है और यह अनुभवहीन देवों के लिए एक बहुत ही सामान्य "गॉचा" है।

तो आपको अपने स्ट्रिंग्स को इनट्स में बदलने की जरूरत है, जैसा कि लासे वी। कार्लसन ने टिप्पणियों में लिखा था। आप या तो Convert.ToInt32(string, 16) का उपयोग करके या int.Parse(str, NumberStyles.HexNumber) का उपयोग करके ऐसा कर सकते हैं - यदि आप सुनिश्चित हैं कि टेक्स्ट में हमेशा हेक्सा-दशमलव संख्या का स्ट्रिंग प्रतिनिधित्व होगा।

उस पाठ के लिए जिसके बारे में आप निश्चित नहीं हैं, आप int.TryParse का उपयोग FormatException के जोखिम से बचने के लिए बेहतर ढंग से करते हैं - लेकिन ध्यान दें कि TryParse bool लौटाता है और int मान लौटाया जाता है out पैरामीटर के माध्यम से: int.TryParse(str, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var val)

0
Zohar Peled 9 नवम्बर 2020, 11:51