Преобразование кода VC ++ в VB.NET

Поэтому я работаю над переносом очень маленького фрагмента кода с VC ++ на .NET. Я всегда был парнем из VB, немного увлекался C #, но не очень, и почти ничего не знал о VC ++. Да, я знаю, это, вероятно, плохая идея пытаться портировать код с языка, о котором вы ничего не знаете, но я не вижу смысла тратить лишнее время на изучение входных и выходных языков для переноса пара сотен строк кода. Мне удалось выучить достаточно, чтобы перенести многие из них, но кое-что мне до сих пор неясно. Вот код VC ++:

#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 (хотя, если бы я знал, что происходит, я бы, конечно, мог переписать это сам, ха-ха).

Как всегда, спасибо всем заранее.

0

Решение

Эти макросы обращают байты в переменных целочисленных типов: short, unsigned short, int, unsigned int, long long и unsigned long long (при условии, что они имеют соответственно размеры 16, 32 и 64 бит).
Например, если есть некоторая переменная типа unsigned short со значением 0x1234, то после применения первого макроса ES16 (0x1234) результат будет 0x3412.

Что было бы более понятно рассмотреть шаг за шагом действие макроса

((U16) _val) & 0xff00) будет равно 0x1200
затем

0x1200 >> 8 будет равно 0x0012

((U16) _val) & 0x00ff) будет равно 0x0034

затем

0x0034 << 8 будет равно 0x3400

И наконец

0x0012 | 0x3400 приведет к 0x3412

0

Другие решения

Других решений пока нет …