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 として定義すると、比較は true になります。列挙型が既に unsigned char として定義されているにもかかわらず、列挙型に対するテストが失敗するのはなぜですか?

4

1 に答える 1

2

char は署名付きで、enum は署名なしです。おそらく、コンパイラは比較を行う前に符号拡張しますか?

于 2013-01-26T23:39:51.203 に答える