У меня есть 4 байта данных (сохраненных как unsigned int), которые я хотел бы использовать.Преобразование буфера в unsigned int и использование битовой маски
Если это 1 байт данных, это была решена с помощью:
//Java
buffer.get() & 0xFF
//Objective-C
uint32_t buffer;
[data getBytes:&buffer range:NSMakeRange(2, 1)];
uint32_t payloadLength = buffer & 0xFFu;
//data = d1021b53
//buffer = 897307; payloadLength: 27
В Java для 4 байт, это было сделано с помощью:
//Java
buffer.getInt() & 0xFFFFFFFFL
//Current not working Objective-C code
uint32_t buffer;
[data getBytes:&buffer range:NSMakeRange(2, 4)];
uint32_t payloadLength = CFSwapInt32BigToHost(buffer);
//data: 0103940f b7626361
//buffer = 1656164244; payloadLength: 2484057954 (should be = ~80)
Для объективно- C/C, мне трудно работать с 4 байтами и битмашками.
У кого-нибудь есть справка?
У меня не было радости, используя это. Я изменил оригинал, чтобы отразить изменение примера с объектами-c 1 байтом, чтобы использовать unsigned int (как и должно быть). Когда я пытаюсь использовать CFSwapInt32BigToHost (или Little) с 4-байтовым значением, результат непонятен. Даже использование этого примера 1 байта не работает. Любые другие предложения о том, как копировать битовую маску java 0xFFFFFFFF? –
В этом случае нет необходимости использовать битовую маску. Можете ли вы отредактировать свой вопрос (поскольку написание кода в комментарии на самом деле не работает), покажите код, который вы теперь используете на основе этого ответа, и включите результаты 'NSLog (@"% @ \ n% 8x \ n% 8x ", data, buffer, payloadLength)'? (вырезать часть дампа 'data', если он длинный!) – CRD
Я отредактировал сообщение, чтобы показать примерные значения, и показать, что это сейчас, что не работает. –