2012-05-05 3 views
1

Я работал с InputStreams в Objective-C и, похоже, сделал неправильный шаг в обработке полученных данных.Преобразование данных InputStream в разные типы данных

Я получаю куски байтов, которые считываются и преобразуются в типы данных, как целые числа, поплавки, удваивается и т.д.

До сих пор мой процесс выглядит так:

readBuffer = (uint8_t *) malloc(4); 
memset(readBuffer, 0, 4); 
while (length < byteLength) { 
    length = [InputStream read:readBuffer 4]; 
} 
[something fourByteUint8ToLong:readBuffer]; 

Теперь для того, чтобы сделать некоторые преобразования из 4 байтов в длинной

- (long) fourByteUint8ToLong:(uint8_t *) buffer 
{ 
    long temp = 0; 
    temp |= buffer[0] & 0xFF; 
    temp <<= 8; 
    temp |= buffer[1] & 0xFF; 
    temp <<= 8; 
    temp |= buffer[2] & 0xFF; 
    temp <<= 8; 
    temp |= buffer[3] & 0xFF; 
    return temp; 
} 

есть не простой способ справиться с этим, используя классы Objective-C?

В таком случае как? 8-байты -> double, 4-байты -> float.

Заранее спасибо.

ответ

1

Проблема решена с помощью функции CoreFoundation.h класса:

uint8_t * buffer; 
buffer = (uint8_t *) malloc(8); 
double tempDouble = CFConvertFloat64SwappedToHost(*((CFSwappedFloat64*)buffer)); 
Смежные вопросы