C++ 将UIImage转换为常量字符*?

C++ 将UIImage转换为常量字符*?,c++,ios,objective-c,protocol-buffers,C++,Ios,Objective C,Protocol Buffers,我需要将UIImage转换为const char*,因为我使用的是来自google的protobuffer,消息结构接受这种类型的参数。我首先将图像解析为NSData: UIImage *image = [UIImage imageNamed:@"sign_up_button"]; NSData *imageData = UIImagePNGRepresentation(image); const char *test = (const char*)[bytesString bytes];

我需要将
UIImage
转换为
const char*
,因为我使用的是来自google的
protobuffer
,消息结构接受这种类型的参数。我首先将图像解析为
NSData

UIImage *image = [UIImage imageNamed:@"sign_up_button"];
NSData *imageData =  UIImagePNGRepresentation(image);  
const char *test = (const char*)[bytesString bytes];
但是当我打印结果时,我得到的是:
\xff\xd8\xff\xe0
有什么问题,因为结果必须是一个带有编码字符的长字符串

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


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

您会看到转义字符,因为它们不在可打印字符范围内。字符串
test
包含二进制形式的图像的PNG表示。如果需要以0结尾的可打印字符字符串,则可以对图像进行base64编码data@user1781290如何使用base64编码我知道这个返回
NSString
,从这里再转换成const char*?@user1781290我认为他不能选择格式。@Aminegm无意冒犯,但他可以在
for
循环中打印每个字符,因为他知道数组的长度。或者他可以使用
–initWithBytes:length:encoding:
等进行调试,因为它们采用长度参数。(
NSString
存储的原始数据不是以0结尾的,而是基于长度的。)好的,我现在明白了,更清楚了。我开始调试,因为到达服务器的映像已损坏,无法打开。您应该尽可能原始地传递“字符串”(它是字节数组)。出于调试目的,请遵循user1781290的提示。@AminNegm Awad我尝试了
–initWithBytes:length:encoding:
,但结果为零,这对我来说是一个很大的谜。