从 C# 到 VB.Net 的位映射转换

本文关键字:映射 转换 Net VB | 更新日期: 2023-09-27 17:56:28

我正在尝试将一些 C# 代码转换为 VB.Net。 请参阅以下内容:

C#:

private const ushort SO_IMAGE_RAW = 1;
private const ushort SO_IMAGE_DIB = 2;
private const ushort SO_IMAGE_DCM = 3;
private const ushort SO_IMAGE_BITDEPTH = 12;
private const ushort SO_IMAGE_FORMAT = SO_IMAGE_RAW;
int format = (SO_IMAGE_BITDEPTH << 16) + (SO_IMAGE_FORMAT & 0x0000FFFF);

从观察者:format=786433 int这是正确的值。

VB.Net:

Private Const SO_IMAGE_RAW As UShort = 1
Private Const SO_IMAGE_DIB As UShort = 2
Private Const SO_IMAGE_DCM As UShort = 3
Private Const SO_IMAGE_BITS As UShort = 12
Private Const SO_IMAGE_FORMAT = SO_IMAGE_RAW
Dim format As Integer = (SO_IMAGE_BITS << 16) + (SO_IMAGE_FORMAT And &HFFFF)

从观察器:格式=13整数'' 这是不正确的值。

知道为什么吗?

谢谢。

从 C# 到 VB.Net 的位映射转换

将常量更改为整数,得到与 C# 相同的结果:

Private Const SO_IMAGE_RAW As Integer = 1
Private Const SO_IMAGE_DIB As Integer = 2
Private Const SO_IMAGE_DCM As Integer = 3
Private Const SO_IMAGE_BITDEPTH As Integer = 12
Private Const SO_IMAGE_FORMAT As Integer = SO_IMAGE_RAW

我不太确定为什么这是必要的,但下面的帖子可能会有所启发:VB.NET 和 C# 之间的二进制移位差异

另一种选择 - 也许更容易接受,是保持常量相同,但只需使用强制转换:

Dim format As Integer = (CInt(SO_IMAGE_BITDEPTH) << 16) + (SO_IMAGE_FORMAT And &HFFFF)

我想你忘了在这行中指定数据类型

Private Const SO_IMAGE_FORMAT = SO_IMAGE_RAW

尝试将其更改为

Private Const SO_IMAGE_FORMAT As UShort = SO_IMAGE_RAW

编辑:

这也是将c#代码转换为vb.net的好工具

Private Const SO_IMAGE_RAW As UShort = 1
Private Const SO_IMAGE_DIB As UShort = 2
Private Const SO_IMAGE_DCM As UShort = 3
Private Const SO_IMAGE_BITDEPTH As UShort = 12
Private Const SO_IMAGE_FORMAT As UShort = SO_IMAGE_RAW
Private format As Integer = (SO_IMAGE_BITDEPTH << 16) + (SO_IMAGE_FORMAT And &Hffff)

将 C# 转换为 VB.NET 链接1

将 C# 转换为 VB.NET 链接2