2010-06-26 19 views
17

मैं सीख रहा हूं कि सी # का उपयोग करके बाइट से दो निबल्स (उच्च और निम्न) कैसे प्राप्त करें और कैसे दो निबल्स को बाइट में वापस लेना है।सी # में आप कैसे नींबू (nybble) बाइट्स कर सकते हैं?

मैं सी # और नेट 4.0 का उपयोग कर रहा है कि अगर तरीकों क्या किया जा सकता है और क्या पुस्तकालयों उपलब्ध हो सकता है के साथ मदद करता है।

उत्तर

27

आप 'बंद मुखौटा' कर सकते हैं एक बाइट के 4 बिट्स एक निबल के लिए, तो बाइट में सबसे दायीं ओर की स्थिति में उन बिट्स बदलाव:

byte x = 0xA7; // For example... 
byte nibble1 = (byte) (x & 0x0F); 
byte nibble2 = (byte)((x & 0xF0) >> 4); 
// Or alternatively... 
nibble2 = (byte)((x >> 4) & 0x0F); 
byte original = (byte)((nibble2 << 4) | nibble1); 
+0

इस समाधान बहुत अच्छी तरह से काम करता है, तो वें ई ओपी मास्क करना और पूरी तरह से 4 बिट मानों में कनवर्ट करना चाहता है जो अक्सर मामले में होता है। – Firoso

0

मैं आपको कुछ बिटवाइज़ संचालन कर सकता है ग्रहण करेंगे

byte nib = 163; //the byte to split 
byte niblow = nib & 15; //bitwise AND of nib and 0000 1111 
byte nibhigh = nib & 240; //bitwise AND of nib and 1111 0000 
Assert.IsTrue(nib == (nibhigh | niblow)); //bitwise OR of nibhigh and niblow equals the original nib. 
+0

यदि दावा सही नहीं है तो इसका क्या अर्थ है? – krvl

+0

@krvl इसका मतलब है कि कुछ प्रकार की त्रुटि थी। यदि वह दावा झूठा है, तो इसका मतलब है कि कम निबल के साथ संयुक्त उच्च निबल मूल बाइट के बराबर नहीं है। यदि ऐसा है, तो गणना में कुछ प्रकार की त्रुटि होगी। – ProgramFast

2

इस विस्तार क्या ओ पी का अनुरोध किया, मैंने सोचा है क्यों यह साझा:

/// <summary> 
/// Extracts a nibble from a large number. 
/// </summary> 
/// <typeparam name="T">Any integer type.</typeparam> 
/// <param name="t">The value to extract nibble from.</param> 
/// <param name="nibblePos">The nibble to check, 
/// where 0 is the least significant nibble.</param> 
/// <returns>The extracted nibble.</returns> 
public static byte GetNibble<T>(this T t, int nibblePos) 
where T : struct, IConvertible 
{ 
nibblePos *= 4; 
var value = t.ToInt64(CultureInfo.CurrentCulture); 
return (byte)((value >> nibblePos) & 0xF); 
} 
+1

सरल: '(मूल्य >> nibblePos) और 0x0F' –

+0

@ बेनवोइग, आप सही हैं। अपडेट किया गया। धन्यवाद। – Shimmy

संबंधित मुद्दे