【问题标题】:How can I declare hex vars in c#如何在 C# 中声明十六进制变量
【发布时间】:2016-07-07 00:15:43
【问题描述】:

如何在 c# 中声明 2 个字节的十六进制并在“if”中进行比较,如以下 java 代码:

public static final int MSG_GENERAL_RESPONSE = 0x8001;

int type = buf.readUnsignedShort();

if (type == MSG_TERMINAL_REGISTER) {
}

c# 2 字节在 c# 中是不可能的?我试过了,还没有找到方法。如何将这段代码翻译成 c#?

【问题讨论】:

  • 在 C# 中是一样的。 C# 使用 BitConverter 类。在那里您可以使用 BitConverter.ToUInt16 将其转换为无符号短字节数组,或使用 BitConverter.GetBytes 将其从无符号短字节数组转换为字节数组
  • 如果您删除 final 关键字,这是有效的 C# 代码。在 C# 中,short 数据类型为 2 个字节。我不明白问题是什么。

标签: c# .net hex


【解决方案1】:

在您的情况下使用 int 是可以的(即带符号的 32 位整数类型),但看起来 ushort(无符号 16 位)在这里更精确:

public const ushort MSG_GENERAL_RESPONSE = 0x8001;

// ...

ushort type = buf.readUnsignedShort();

if (type == MSG_TERMINAL_REGISTER) {
}

注意,如果你想给出一个十六进制的 negative 文字(约定当前导数字从 8F 时,它是二进制补码),你需要以下笨拙的符号:

// negative:
public const short MSG_GENERAL_RESPONSE = unchecked((short)0x8001);

您不能在 C# 中使用 final。对于类成员,您可以使用static readonlyconst(后者是隐式静态的)。对于局部变量,您可以使用const

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2012-05-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2015-05-22
    相关资源
    最近更新 更多