Итак, я работаю над переносом очень маленького фрагмента кода из VC++ в .NET. Я всегда был парнем VB, немного ругался на C#, но не очень, и мало знаю, что в VC++. Да, я знаю, это, вероятно, плохая идея, чтобы попытаться перекодировать код с языка, о котором вы ничего не знаете, но я не вижу смысла в том, чтобы потратить лишнее время на изучение языка и языка, чтобы портировать пара сотен строк кода. Мне удалось научиться достаточно, чтобы многое переместить, но что-то еще неясно. Вот код VC++:VC++ Преобразование кода VB.NET
#define ES16(_val) \
((u16)(((((u16)_val) & 0xff00) >> 8) | \
((((u16)_val) & 0x00ff) << 8)))
#define ES32(_val) \
((u32)(((((u32)_val) & 0xff000000) >> 24) | \
((((u32)_val) & 0x00ff0000) >> 8) | \
((((u32)_val) & 0x0000ff00) << 8) | \
((((u32)_val) & 0x000000ff) << 24)))
#define ES64(_val) \
((u64)(((((u64)_val) & 0xff00000000000000ull) >> 56) | \
((((u64)_val) & 0x00ff000000000000ull) >> 40) | \
((((u64)_val) & 0x0000ff0000000000ull) >> 24) | \
((((u64)_val) & 0x000000ff00000000ull) >> 8) | \
((((u64)_val) & 0x00000000ff000000ull) << 8) | \
((((u64)_val) & 0x0000000000ff0000ull) << 24) | \
((((u64)_val) & 0x000000000000ff00ull) << 40) | \
((((u64)_val) & 0x00000000000000ffull) << 56)))
Может кто-нибудь объяснить, что здесь происходит? И, возможно, немного поразмышляем над тем, как переписать это в VB.NET (хотя, если бы я знал, что происходит, я мог бы переписать его сам, ха-ха).
Как всегда, заранее спасибо всем.
Похоже, что это замена байта/слова/порядка dword (endian conversion) – Zenilogix
Это байтовый код разворота для преобразования между мало-endian и big-endian. Вы можете сделать это с помощью BitConverter.GetBytes() и Array.Reverse() или использовать Sketch's MiscUtil. –