1

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

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,则比较为真。为什么即使枚举已经定义为无符号字符,对枚举的测试也会失败?

4

1 回答 1

2

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

于 2013-01-26T23:39:51.203 回答