2013-03-21 200 views
4

我正在將UIImage轉換爲NSData。我想將NsData轉換爲Byte Array,並在json Parser的幫助下將該Byte數組發送到服務器。objective c - 如何將nsdata轉換爲字節數組

如果我傳遞以下類型的靜態字符串到服務器它接受和存儲。以下僅是示例字符串語法。我想follwoing類型的字節數組發佈數據到服務器。

[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6 ,7,6,5,8,7,7,7,9,9,8,10,12,...]

對於上述結果我正在轉換圖像數據如下:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 

現在我想的NSData轉換爲字節數組,我使用下面的代碼:

NSUInteger len = [data length]; 
Byte *byteData = (Byte*)malloc(len); 
memcpy(byteData, [data bytes], len); 
free(byteData) 

,我也這樣存儲的NSData。但不能得到有關結果。 我還輸入了循環代碼,但每次輸出結果都是aPNG

我在做上述代碼中的任何錯誤嗎?

請給我一些幫助,並要求提供任何幫助。

在此先感謝。

+0

是否要將其轉換爲字節數組(C的含義)或表示數值列表的JSON編碼字符串? – zneak 2013-03-21 18:35:45

+0

爲什麼要在填滿緩衝區後儘快釋放緩衝區?如果你期望緩衝區仍然保持着NSData對象所持有的東西......你不能指望它釋放它。只有當你不再需要緩衝區時才釋放它。 – mah 2013-03-21 18:37:11

+0

@udy感謝您的回覆,但是使用這種方式。它不工作。 – 2013-03-21 18:40:40

回答

10

我不是100%確定這是你正在尋找或沒有。試試:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 
NSUInteger len = data.length; 
uint8_t *bytes = (uint8_t *)[data bytes]; 
NSMutableString *result = [NSMutableString stringWithCapacity:len * 3]; 
[result appendString:@"["]; 
for (NSUInteger i = 0; i < len; i++) { 
    if (i) { 
     [result appendString:@","]; 
    } 
    [result appendFormat:@"%d", bytes[i]]; 
} 
[result appendString:@"]"]; 

這是你所需要的?

+0

小提示:如果你將'bytes'聲明爲'const uint8_t * bytes',那麼你不需要在rhs上輸入類型。 – 2013-03-21 21:39:00