Как добавить байты битового поля в NSMutableData - PullRequest
1 голос
/ 02 сентября 2011

У меня есть структура

typedef struct {
   int8_t foo        : 1;
} Bar;

Я попытался добавить байты к объекту NSMutableData следующим образом:

NSMutableData* data = [[NSMutableData alloc] init];
Bar temp;
temp.foo = 1;
[data appendBytes:&temp.foo length:sizeof(int8_t)];

Но я получаю ошибку адреса запрашиваемого битового поля. Как я могу добавить байты?

1 Ответ

0 голосов
/ 02 сентября 2011

Укажите на байт, замаскируйте необходимый бит и добавьте переменную в виде байта:

typedef struct {
    int8_t foo: 1;
} Bar;

NSMutableData* data = [[NSMutableData alloc] init];
Bar temp;
temp.foo = 1;

int8_t *p = (int8_t *)(&temp+0);    // Shift to the byte you need
int8_t pureByte = *p & 0x01;       // Mask the bit you need
[data appendBytes:&pureByte length:sizeof(int8_t)];
...