इसके अलावा, वहाँ एक कक्षा में Endian
कहा जाता है जॉन स्कीट के miscutil library जो एक बाइट सरणी और विभिन्न आदिम प्रकार, खाते में endianness लेने के बीच रूपांतरण तरीकों लागू करता है।
// Input data
byte[] tab = new byte[32];
// Pick the appropriate endianness
Endian endian = Endian.Little;
// Use the appropriate endian to convert
int a = endian.ToInt32(tab, 0);
int b = endian.ToInt32(tab, 4);
int c = endian.ToInt32(tab, 8);
int d = endian.ToInt32(tab, 16);
...
एन्डियन वर्ग का एक सरलीकृत संस्करण होगा कुछ की तरह:
public abstract class Endian
{
public short ToInt16(byte[] value, int startIndex)
{
return unchecked((short)FromBytes(value, startIndex, 2));
}
public int ToInt32(byte[] value, int startIndex)
{
return unchecked((int)FromBytes(value, startIndex, 4));
}
public long ToInt64(byte[] value, int startIndex)
{
return FromBytes(value, startIndex, 8);
}
// This same method can be used by int16, int32 and int64.
protected virtual long FromBytes(byte[] buffer, int startIndex, int len);
}
और फिर FromBytes
सार विधि के लिए अलग तरह से कार्यान्वित किया जाता है
अपने प्रश्न के लिए, उपयोग की तरह कुछ होगा प्रत्येक एंडियन प्रकार।
public class BigEndian : Endian
{
protected override long FromBytes(byte[] buffer, int startIndex, int len)
{
long ret = 0;
for (int i=0; i < len; i++)
{
ret = unchecked((ret << 8) | buffer[startIndex+i]);
}
return ret;
}
}
public class LittleEndian : Endian
{
protected override long FromBytes(byte[] buffer, int startIndex, int len)
{
long ret = 0;
for (int i=0; i < len; i++)
{
ret = unchecked((ret << 8) | buffer[startIndex+len-1-i]);
}
return ret;
}
}
हालांकि प्रदर्शन के अनुसार, हर बार सरणी को उलटने के बजाय बिग एंड लिटिल एंडियन के लिए दो अलग-अलग कक्षाएं बेहतर होंगी। इसके अलावा, चूंकि ओपी के मूल प्रश्न में 4 इन्स की एक सरणी है, इसलिए व्यक्तिगत 4-बाइट शब्दों को उलटना होगा। और चूंकि सिस्टम आर्किटेक्चर अग्रिम में जाना जाता है, ओओपी दृष्टिकोण अधिक समझ में आता है। – Groo
@ ग्रूओ: पोस्टर के कोड स्निपेट में 4 बाइट्स –