【问题标题】:switch case statment in C# with hex values在 C# 中使用十六进制值切换 case 语句
【发布时间】:2016-06-23 07:54:10
【问题描述】:

我收到一个 uint 值并以十六进制值感知(就使用而言),我想根据这个值设置一个 switch case,如下例所示:

uint foo=someHexValue
uint a;
switch(foo){
    case 0xFFFF : a = 0x0;break;   
    case 0xFFFE : a = 0x1;break;   
    case 0xFFFC : a = 0x2;break;
    case 0x0001 : a = 0x3;break;   
    case 0x0010 : a = 0x4;break; 
}

请注意,foo 的值不一定是有序的或包含所有可能的值。

关于十进制值,我可以这样做吗:

uint foo=hexValue
uint a;
switch(foo){
    case 65535: a = 0x0;break;   
    case 65534: a = 0x1;break;   
    case 65532: a = 0x2;break; 
    case 1: a = 0x3;break;   
    case 16: a = 0x4;break;   
}

是否可以在 switch case 中使用十六进制值?还有其他方法吗?

【问题讨论】:

  • 您是否按预期获得输出?或者它会给你任何错误?
  • 实际问题是什么?代码没有运行吗?数字字面量与switch 的工作方式无关,实际数字是一样的
  • 在你输入这个问题的时间里,你可以尝试两次,但不……你使用什么没有区别。
  • 是什么阻止你尝试?此外,C# 中没有“十六进制值”。十六进制文字(例如0xFFFF)被解释为int
  • @havakok dotnetfiddle.net

标签: c# switch-statement


【解决方案1】:

当然可以。 “十六进制值”只是整数类型的表示法,它是 C# switch 块中的有效大小写标签。

除了switch 块的跟进性质 - 您正在使用break 语句来避免 - 案例标签的顺序无关紧要。

【讨论】:

    【解决方案2】:

    是的。您的代码可以正常工作。类型 uint 可以使用 HEX 值分配。如果您在代码执行后尝试打印“foo”或“a”的值,您可以看到它们具有与您分配的 HEX 值相对应的整数值。

    在 switch case 语句中可以使用 HEX 值代替整数值。两者都可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2010-10-04
      • 2011-08-04
      • 2016-02-04
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多