2012-03-27 92 views
1

我正在研究一个iPad项目(iOS 5.1),该项目需要从url中获取图像并将它们作为sqlite3 blob进行缓存。我使用ASIHTTPRequest来获取图像数据,并使用SOCI将blob插入到缓存表中。该项目是用C++编写的(与最小的Objective-C混合)。如何将块unsigned char *内存转换为[signed] char *内存块?

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

那么,问题是,将我的无符号char *缓冲区转换为char *缓冲区一个可行的解决方案? ..如果是这样,我该怎么做? ..另外,还有什么其他选择来解决这个问题?

回答

3

一个简单的铸件将做的工作:

(unsigned char *)myCharPointer 
(char *)myUnsignedCharPointer 
+0

您将需要转换为'const char *'。 – Joe 2012-03-27 13:31:47

+0

我使用reinterpret_cast ...但是,是的,同样的区别。谢谢。 – aleroy 2012-03-27 13:41:10

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! 
+0

缓冲区不应该消失或变得无效,除非a)你释放'数据'或弹出它属于的自动释放池b)你改变可变数据' – Joe 2012-03-27 13:28:23

+0

谢谢,是啊......我在发布后得到它的工作分钟数。 – aleroy 2012-03-27 13:39:36

+0

@Joe准确。谈到内存管理时,安全总比对不起更好。 – 2012-03-27 13:39:55

相关问题