C++ VC++;到VB.NET的代码转换
因此,我正在将一小段代码从VC++移植到.NET。我一直是一个VB的家伙,涉猎了一点C#,但不多,对VC++几乎一无所知。是的,我知道,尝试从一种你一无所知的语言移植代码可能是个坏主意,但我不认为为了移植几百行代码而花不必要的时间来学习一种语言的输入和输出有什么意义。我已经学了足够多的东西,把它移植了,但有些事情我还不清楚。以下是VC++代码:C++ VC++;到VB.NET的代码转换,c++,vb.net,visual-c++,code-conversion,C++,Vb.net,Visual C++,Code Conversion,因此,我正在将一小段代码从VC++移植到.NET。我一直是一个VB的家伙,涉猎了一点C#,但不多,对VC++几乎一无所知。是的,我知道,尝试从一种你一无所知的语言移植代码可能是个坏主意,但我不认为为了移植几百行代码而花不必要的时间来学习一种语言的输入和输出有什么意义。我已经学了足够多的东西,把它移植了,但有些事情我还不清楚。以下是VC++代码: #define ES16(_val) \ ((u16)(((((u16)_val) & 0xff00) >> 8) | \
#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)))
#定义ES16(_val)\
(((((()(((u16)val)和0xff00)>>8)\
((((u16)u val)和0x00ff)大于24)\
((((u32)u val)和0x00ff0000)>>8)\
((((u32)u val)和0x0000ff00)56)\
(((u64)u val)&0x00ff000000000000ull)>>40)\
(((u64)u val)&0x0000ff000000000ull)>>24)\
(((u64)u val)&0x000000ff00000000ull)>>8)\
(((u64)_val)&0x00000000ff000000ull)这些宏反转整数类型变量中的字节:short、unsigned short、int、unsigned int、long long和unsigned long long(前提是它们具有相应的16、32和64位大小)。
例如,如果某个类型为unsigned short的变量的值为0x1234,则在应用第一个宏ES16(0x1234)后,结果将为0x3412
<> P>更重要的是,通过考虑宏的作用来进一步考虑。
((u16)_val)&0xff00)将等于0x1200
然后
0x1200>>8将等于0x0012
((u16)_val)和0x00ff)将等于0x0034
然后
0x0034在我看来就像是在交换字节/单词/dword顺序(endian转换)这是在小endian和大endian之间转换的字节反转代码。您可以使用BitConverter.GetBytes()和Array.Reverse()或使用Skeet的MiscUtil。