तो मैं अपने भ्रम का एक बड़ा हिस्सा पता लगा इस से संबंधित है: IsLittleEndian field reports false, but it must be Little-Endian?
क्या मैं लपेटकर था कर समाप्त हो गया सभी BitConverter कॉल कि endianness specifiy के लिए एक अतिरिक्त पैरामीटर ले लिया है, तो साथ कॉल एक फ़ंक्शन जोड़ा गया है जिसे यह देखने के लिए बुलाया जाता है कि बाइट्स को सम्मानित किया जाना चाहिए या नहीं।
public static class BitEndianConverter
{
public static byte[] GetBytes(bool value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(char value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(double value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(float value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(int value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(long value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(short value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(uint value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(ulong value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
public static byte[] GetBytes(ushort value, bool littleEndian)
{
return ReverseAsNeeded(BitConverter.GetBytes(value), littleEndian);
}
private static byte[] ReverseAsNeeded(byte[] bytes, bool wantsLittleEndian)
{
if (wantsLittleEndian == BitConverter.IsLittleEndian)
return bytes;
else
return (byte[])bytes.Reverse().ToArray();
}
}
स्रोत
2010-08-05 15:11:19
मुझे लगता है कि मैं कहाँ संदेह में हूँ, हालांकि बाद से BitConverter.IsLittleEndian झूठे रिटर्न है, लेकिन BitConverter.GetBytes() थोड़ा endian सरणियों देता है। –
यदि यह विंडोज है, तो बिटकोनवर्टर.इस्लिटल इंडियन झूठी वापसी स्पष्ट रूप से एक बग है, क्योंकि x86 और x86-64 प्रोसेसर लिटिल एंडियन हैं। – Powerlord