【问题标题】:Comparing char with enum比较 char 和 enum
【发布时间】:2013-01-26 23:36:54
【问题描述】:

我有一个这样定义的枚举:

typedef enum : unsigned char {
    START_DELIMITER = 0xAA,
    END_DELIMITER   = 0xBB,
} Delimiter;

当我将分隔符值与来自 const char* 的 char 字节进行比较时,如下所示:

// data is NSData;
const char *bytes = [data bytes];
if (bytes[0] == START_DELIMITER) { }

即使 bytes[0] 包含 0xAA,上述测试也是错误的。

如果我将 START_DELIMITER 定义为 const char,则比较为真。为什么即使枚举已经定义为无符号字符,对枚举的测试也会失败?

【问题讨论】:

  • 我猜char 已在您的实现上签名,而0xAA 不适合它。
  • 为什么要使用枚举呢?为什么不声明一组常量?

标签: objective-c enums c99


【解决方案1】:

字符是有符号的,而枚举是无符号的。也许编译器会在进行比较之前进行符号扩展?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2012-01-25
    相关资源
    最近更新 更多