NSData和void *之间的转换

时间:2013-11-08 02:04:45

标签: objective-c c

在我的iPhone应用程序中,我必须使用MQTT的基于C的静态库来发送和接收其有效负载,有效负载必须无效*,我需要发送文本,图片和语音等消息 这是我的发送方法,我将所有类型的有效负载转换为NSData对象。消息是一个具有void * payload

的结构
`+ (int)send:(NSString *)mqTopic payLoad:(NSData *)mqPayLoad`

MQTTClient_message pubmsg = MQTTClient_message_initializer;
pubmsg.payloadlen = mqPayLoad;

如何解决C和ojbc之间的类型冲突?

应该感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

NSData有一个方法- (const void *)bytes。所以这应该有助于解决你所面临的类型冲突。

NSUInteger len = [mqPayLoad length];
void *typedData = malloc(len);
memcpy(typedData, [mqPayLoad bytes], len);
pubmsg.payloadlen = typedData;

由于字节返回const void*,因此最好使用memcopy()而不是类型转换。