将NSString转换为uint8_t

时间:2011-01-24 13:09:08

标签: iphone objective-c ios

我正在研究Apple在“证书,密钥和信任编程指南”中提供的数据加密示例代码。加密/解密数据的示例代码考虑了uint8_t。然而,真实世界的应用程序将在NSString对象上执行此操作。我一直在尝试将NSString对象转换为uint8_t,但每次我收到编译器警告。在各种论坛中给出的“几乎”相同问题的解决方案似乎对我没有用。

2 个答案:

答案 0 :(得分:15)

以下是将任何字符串值转换为uint8_t*的示例。最简单的方法是将NSData的字节转换为uint8_t *。其他选项是分配内存并复制字节,但仍需要以某种方式跟踪长度。

NSData *someData = [@"SOME STRING VALUE" dataUsingEncoding:NSUTF8StringEncoding];
const void *bytes = [someData bytes];
int length = [someData length];

//Easy way
uint8_t *crypto_data = (uint8_t*)bytes;

可选方式

//If you plan on using crypto_data as a class variable
// you will need to do a memcpy since the NSData someData
// will get autoreleased
crypto_data = malloc(length);
memcpy(crypto_data, bytes, length);
//work with crypto_data

//free crypto_data most likely in dealloc
free(crypto_data);

答案 1 :(得分:2)

NSString *stringToEncrypt = @"SOME STRING VALUE";
uint8_t *cString = (uint8_t *)stringToEncrypt.UTF8String;