隨着各種渠道的幫助下端互換,我已經寫在我的二進制讀取類的一些SwapBytes
方法,在ushort
交換端,uint
和ulong
,全部採用按位操作都在原C#有沒有必要任何unsafe
的代碼。按位各類
public ushort SwapBytes(ushort x)
{
return (ushort)((ushort)((x & 0xff) << 8) | ((x >> 8) & 0xff));
}
public uint SwapBytes(uint x)
{
return ((x & 0x000000ff) << 24) +
((x & 0x0000ff00) << 8) +
((x & 0x00ff0000) >> 8) +
((x & 0xff000000) >> 24);
}
public ulong SwapBytes(ulong value)
{
ulong uvalue = value;
ulong swapped =
((0x00000000000000FF) & (uvalue >> 56)
| (0x000000000000FF00) & (uvalue >> 40)
| (0x0000000000FF0000) & (uvalue >> 24)
| (0x00000000FF000000) & (uvalue >> 8)
| (0x000000FF00000000) & (uvalue << 8)
| (0x0000FF0000000000) & (uvalue << 24)
| (0x00FF000000000000) & (uvalue << 40)
| (0xFF00000000000000) & (uvalue << 56));
return swapped;
}
我將如何去創造同樣的方法,但對於這些類型的,如短,int和長的簽名的版本,使用上述只是同樣的方法,以及如何改善可以被製成上面的方法?
爲什麼你需要擺在首位交換?難道你不能直接從輸入字節數組中使用期望的字節順序來讀取嗎?根據我的經驗,這會導致更快,更易於閱讀和更容易測試代碼。 – CodesInChaos