Как преобразовать блок беззнаковой памяти char * в блок памяти со знаком char *? - PullRequest
1 голос
/ 27 марта 2012

Я работаю над проектом iPad (iOS 5.1), который требует извлечения изображений из URL-адреса и кэширования их в виде двоичного объекта sqlite3. Я использую ASIHTTPRequest для получения данных изображения и SOCI для вставки большого двоичного объекта в таблицу кеша. Проект написан на C ++ (смешан с минимальным Objective-C).

Проблема в том, что ASIHTTPRequest возвращает двоичные данные через объект NSData ..., из которого я могу получить константный беззнаковый указатель char *. Но интерфейс SOCI предоставляет только интерфейс для чтения / записи данных BLOB-объектов с помощью указателя char * (SOCI внутренне записывает данные в буфер char * перед открытием / записью / чтением из sqlite_blob).

Итак, вопрос в том, превращает ли мой неподписанный буфер char * в буфер char * жизнеспособное решение? ..и если да, как мне это сделать? .. иначе, какие еще варианты мне нужно решить?

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Простой кастинг сделает работу:

(unsigned char *)myCharPointer
(char *)myUnsignedCharPointer
0 голосов
/ 27 марта 2012

Чтобы уточнить, что сказал @Binyamin, обязательно используйте memcpy, хотя, чтобы вы знали, что ваш буфер не исчезнет:

uint8_t *origBuffer = [data bytes];
char *myBuffer = malloc([data length]);

memcpy(myBuffer, origBuffer, [data length]);

// don't forget to free 'myBuffer' when done!
...