1

我正在开发一个 iPad 项目(iOS 5.1),该项目需要从 url 获取图像并将它们缓存为 sqlite3 blob。我正在使用 ASIHTTPRequest 来获取图像数据,并使用 SOCI 将 blob 插入到缓存表中。该项目是用 C++ 编写的(与最小的 Objective-C 混合)。

问题是 ASIHTTPRequest 通过一个 NSData 对象返回二进制数据......我可以从中获取一个 const unsigned char* 指针。但是 SOCI 的接口只提供了一个通过 char* 指针读取/写入 blob 数据的接口……(SOCI 在打开/写入/读取 sqlite_blob 之前在内部将数据写入 char* 缓冲区)。

那么,接下来的问题是将我的 unsigned char* 缓冲区转换为 char* 缓冲区是一个可行的解决方案吗?..如果是这样,我该怎么做?..否则,我还有什么其他选择可以解决这个问题?

4

2 回答 2

3

一个简单的铸造就可以完成这项工作:

(unsigned char *)myCharPointer
(char *)myUnsignedCharPointer
于 2012-03-27T13:15:28.457 回答
0

要详细说明@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!
于 2012-03-27T13:20:52.563 回答