【问题标题】:Check if Char is in range检查 Char 是否在范围内
【发布时间】:2023-04-03 07:22:01
【问题描述】:

如果我有一个范围说000080-0007FF 我想看看包含十六进制的字符是否在该范围内,我该怎么做?

例子

char t = 0xd790;

if (t is within range of 000080-0007FF) // true

【问题讨论】:

    标签: c++ char range hex


    【解决方案1】:

    由于计算机上的十六进制只不过是一种打印数字(如十进制)的方式,因此您也可以与普通的以 10 为底的整数进行比较。

    if( (t >= 128) && (t <= 2047) )
    {
    }
    

    更具可读性。

    【讨论】:

    • 没有。我不同意。十六进制值更具可读性。您可以从十六进制值中看到位模式。
    • 可读性完全取决于上下文。如果位模式与手头的问题相关,则十六进制更具可读性(大概这是 OP 的情况)。如果数字代表正常的项目计数,则小数更具可读性。
    【解决方案2】:
    unsigned short t = 0xd790;
    
    if (t >= 0x80 && t <= 0x7ff) ...
    

    由于 char 的最大值为 0xFF,因此您不能使用它来比较十六进制数字多于 2 的任何内容。

    【讨论】:

      【解决方案3】:
      wchar_t t = 0xd790;
      
      if (t >= 0x80 && t <= 0x7ff) ...
      

      在 C++ 中,字符可以与整数互换,您可以直接比较它们的值。

      请注意,我使用了wchar_t,因为char 数据类型最多只能保存 0xFF 的值。

      【讨论】:

      • 我试过了,我收到警告:由于数据类型的范围有限,比较总是错误的好吧,请阅读您的修复
      • 听起来您的编译器设置为将“char”解释为带符号的数据类型(范围从 -128 到 127)。在我编辑答案时使用 wchar_t。
      • 除了 wchar_t 还有其他方法吗?
      • 是的,使用 16 位的 short。实际上,您确实应该使用无符号值。所以无符号短。
      猜你喜欢
      • 2017-07-13
      • 2021-03-30
      • 2016-05-03
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多