2012-03-27 158 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

相關問題