Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VC++;到VB.NET的代码转换_C++_Vb.net_Visual C++_Code Conversion - Fatal编程技术网

C++ VC++;到VB.NET的代码转换

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) | \

因此,我正在将一小段代码从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)))
#定义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。