如何将NSData转换为const char *?

时间:2018-07-11 22:55:40

标签: objective-c nsdata

我正在尝试将具有音频数据的NSData对象转换为const char *。我必须这样做,因为我要调用的API需要const char *。但是我无法这样做

const char * stream = [data bytes]; //won't compile

const char * stream = (const char *)[data bytes];

将编译,但由于某些原因仅具有前2个字节。

先谢谢了。

2 个答案:

答案 0 :(得分:0)

假定

const char*指向以null结尾的字符串,所以NSData对象中的第一个null字符将终止该字符串。

使用强制转换执行此转换在上下文上没有意义,因为它只是要求API将NSData解释为const char*

如果您试图将NSData传递给需要const char*的API,则可能是出于您的目的使用了错误的API,或者您需要在使用API​​之前重新编码数据。< / p>

更新:基于OP的评论,他想对数据进行编码,以便以后对其进行解码。

有多种解决方案,但是一种简单的可能性是使用API method base64编码数据。然后,您可以base64使用对称API method对其进行解码。然后,您可以使用this answer中建议的方法将结果NSString转换为const char*

答案 1 :(得分:0)

假设您要加载的NSData最初是一个字符串,则可以尝试如下操作:

<form>
<button class="cath" type="button" value="14g">14g</button>
<button class="cath" type="button" value="16g">16g</button>
<button class="cath" type="button" value="18g">18g</button>
<button class="cath" type="button" value="20g">20g</button>
<button class="cath" type="button" value="22g">22g</button>
<button class="cath" type="button" value="24g">24g</button>
</form>

这将首先将NSData转换为NSString,然后将NSString转换为const char指针。

更新

由于您只是尝试将数据编码为十六进制字符串,因此请查看以下线程:

How to convert an NSData into an NSString Hex string?

它应该看起来像这样:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
const char *chars = [string UTF8String];