2014-01-07 148 views
2

我需要因为我用protobuffer从谷歌和消息的结构接受这种类型的参数为UIImage转换成const char *。我开始与图像解析成NSData将UIImage转换为const char *?

UIImage *image = [UIImage imageNamed:@"sign_up_button"]; 
NSData *imageData = UIImagePNGRepresentation(image); 
const char *test = (const char*)[bytesString bytes]; 

但是,当我打印出结果,这是我所得到的:\xff\xd8\xff\xe0什么是错的,因为结果必须是长字符串编码的字符。

+1

您会看到转义字符,因为它们落在可打印字符范围之外。字符串'test'包含二进制形式的图像的PNG表示。 – Krumelur

+1

如果需要可打印字符0结尾的字符串,可以的base64编码数据 – user1781290

+0

@ user1781290如何使用的base64编码我知道这回'NSString',从这个再拍转化为为const char *? – geonl

回答

3

“打印” char*中止,达到\ 0时。这是图像数据的可能内容。你不能“打印”它。您不能将数据作为C字符串处理,因为C字符串是0终止的。不要使用任何需要C字符串的函数。它会失败。

存储一个长度,并将其作为“字节数据”处理。

+0

没错,尽管他知道阵列的长度,但他可以在'for'循环中打印每个字符。我的意思是为了调试目的。 –

+1

或者他可以使用' - initWithBytes:length:encoding:'等,因为它们需要一个长度参数。 ('NSString'存储原始数据*不* 0终止但基于长度。) –

+0

好吧,我现在明白了,这更清楚。我开始进行调试,因为到达服务器的映像已损坏,无法打开。 – geonl